Compartir a través de


DataSourceAttribute (Clase)

Proporciona información específica del origen de datos para las pruebas controladas por datos.Esta clase no puede heredarse.

Jerarquía de herencia

System.Object
  System.Attribute
    Microsoft.VisualStudio.TestTools.UnitTesting.DataSourceAttribute

Espacio de nombres:  Microsoft.VisualStudio.TestTools.UnitTesting
Ensamblado:  Microsoft.VisualStudio.QualityTools.UnitTestFramework (en Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll)

Sintaxis

'Declaración
<AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple := False)> _
Public NotInheritable Class DataSourceAttribute _
    Inherits Attribute
[AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple = false)]
public sealed class DataSourceAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Method, AllowMultiple = false)]
public ref class DataSourceAttribute sealed : public Attribute
[<Sealed>]
[<AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple = false)>]
type DataSourceAttribute =  
    class
        inherit Attribute
    end
public final class DataSourceAttribute extends Attribute

El tipo DataSourceAttribute expone los siguientes miembros.

Constructores

  Nombre Descripción
Método público DataSourceAttribute(String) Inicializa una nueva instancia de la clase DataSourceAttribute.Esta instancia se inicializará con un proveedor de datos y la cadena de conexión asociada al nombre de la configuración.
Método público DataSourceAttribute(String, String) Inicializa una nueva instancia de la clase DataSourceAttribute.Esta instancia se inicializará con una cadena de conexión y un nombre de tabla.
Método público DataSourceAttribute(String, String, String, DataAccessMethod) Inicializa una nueva instancia de la clase DataSourceAttribute.Esta instancia se inicializará con un proveedor de datos, una cadena de conexión, la tabla de datos y el método de acceso a datos para obtener acceso al origen de datos.

Arriba

Propiedades

  Nombre Descripción
Propiedad pública ConnectionString Obtiene un valor que representa la cadena de conexión para el origen de datos.
Propiedad pública DataAccessMethod Obtiene el método utilizado para obtener acceso al origen de datos.
Propiedad pública DataSourceSettingName Obtiene un valor que indica el nombre de la configuración utilizada para identificar la información de la conexión a un origen de datos almacenada en un archivo de configuración.
Propiedad pública ProviderInvariantName Obtiene un valor que representa el proveedor de datos del origen de datos.
Propiedad pública TableName Obtiene un valor que indica el nombre de la tabla que proporciona los datos.
Propiedad pública TypeId Cuando se implementa en una clase derivada, obtiene un identificador único para este Attribute. (Se hereda de Attribute).

Arriba

Métodos

  Nombre Descripción
Método público Equals Infraestructura. Devuelve un valor que indica si esta instancia equivale a un objeto especificado. (Se hereda de Attribute).
Método público GetHashCode Devuelve el código hash de esta instancia. (Se hereda de Attribute).
Método público GetType Obtiene el objeto Type de la instancia actual. (Se hereda de Object).
Método público IsDefaultAttribute Cuando se invalida en una clase derivada, indica si el valor de esta instancia es el valor predeterminado para la clase derivada. (Se hereda de Attribute).
Método público Match Cuando se invalida en una clase derivada, devuelve un valor que indica si esta instancia es igual a un objeto especificado. (Se hereda de Attribute).
Método público ToString Devuelve una cadena que representa el objeto actual. (Se hereda de Object).

Arriba

Campos

  Nombre Descripción
Campo públicoMiembro estático DefaultDataAccessMethod Representa el método de acceso a datos predeterminado.Este campo es de sólo lectura.
Campo públicoMiembro estático DefaultProviderName Representa el nombre del proveedor de datos predeterminado.Este campo es de sólo lectura.

Arriba

Implementaciones explícitas de interfaces

  Nombre Descripción
Implementación explícita de interfacesMétodo privado _Attribute.GetIDsOfNames Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío. (Se hereda de Attribute).
Implementación explícita de interfacesMétodo privado _Attribute.GetTypeInfo Obtiene la información de tipos de un objeto, que puede utilizarse para obtener la información de tipos de una interfaz. (Se hereda de Attribute).
Implementación explícita de interfacesMétodo privado _Attribute.GetTypeInfoCount Recupera el número de interfaces de información de tipo que proporciona un objeto (0 ó 1). (Se hereda de Attribute).
Implementación explícita de interfacesMétodo privado _Attribute.Invoke Proporciona acceso a las propiedades y los métodos expuestos por un objeto. (Se hereda de Attribute).

Arriba

Comentarios

La clase DataSourceAttribute proporciona dos maneras de especificar la información del origen de datos para las pruebas controladas por datos.En la primera de las formas se especifica información a través de una cadena de conexión, información del proveedor y el nombre de la tabla de origen que se pasan a DataSourceAttribute.

Ejemplo de cadena de conexión:

[DataSource("Provider=SQLOLEDB.1;Data Source=MySource;Integrated] Security=SSPI;Initial Catalog=MyCatalog;Persist Security Info=False", "MyTable")]

La segunda alternativa pasa un único argumento al atributo que especifica la opción de configuración ubicada en el archivo app.config.

Ejemplo de opción de configuración:

[DataSource("dataSourceNameFromConfigFile")]

[!NOTA]

Los diferentes proveedores de datos usan cadenas de conexión distintas.Nombre del proveedor que forma parte de la cadena de conexión.

Para obtener más información sobre cómo usar el archivo app.config para especificar un origen de datos, vea Tutorial: Utilizar un archivo de configuración para definir un origen de datos.

Para obtener más información acerca de las pruebas controladas por datos, vea Data-Driven Unit Tests.

Para obtener más información sobre cómo utilizar atributos, vea Extender metadatos mediante atributos.

Ejemplos

El código siguiente contiene la clase y el método que se van a probar:

using System;

namespace BankAccountNS
{
    public class BankAccount
    {
        private string custName;
        private double bal;

        public BankAccount(string customerName, double balance)
        {
            custName = customerName;
            bal = balance;
        }

        public double Balance
        { get { return bal; } }

        public void Debit(double amount)
        {
            if (amount < 0)
                throw new ArgumentOutOfRangeException("amount");
            bal -= amount;
        }
    }
}
Imports System

Namespace BankAccountNS
    Public Class BankAccount
        Private customerName As String
        Private bal As Double

        Public Sub New(ByVal customerName2 As String, ByVal balance As Double)
            customerName = customerName2
            bal = balance
        End Sub

        Public ReadOnly Property Balance() As Double
            Get
                Return bal
            End Get
        End Property

        Public Sub Debit(ByVal amount As Double)
            If amount < 0 Then
                Throw New ArgumentOutOfRangeException("amount")
            End If
            bal -= amount
        End Sub
    End Class
End Namespace

La siguiente prueba se realizará correctamente.Utiliza la base de datos Access sample.mdb, que contiene los datos siguientes en Table1.

Name

Balance

Importe

Jorg Bott

100

25

Pedro Ruivo

70

60

Mandar Samant

75

71.25

Russell King

159

158

Jun Cao

11.99

11.22

Observe que DataAccessMethod es secuencial.

using Microsoft.VisualStudio.TestTools.UnitTesting;
using BankAccountNS;
using System;

namespace MyCSTestProject
{
    [TestClass()]
    public class BankAccountTest
    {
        private TestContext testContextInstance;
        public TestContext TestContext
        {
            get { return testContextInstance; }
            set { testContextInstance = value; }
        }

        [TestMethod()]
        [DataSource("System.Data.OleDb",
           "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"C:\\sample.mdb\"",
           "Table1",
           DataAccessMethod.Sequential)]
        public void DebitTest()
        {
            string customerName = testContextInstance.DataRow["Name"].ToString();

            double bal = Convert.ToDouble(testContextInstance.DataRow["Balance"]);
            double amt = Convert.ToDouble(testContextInstance.DataRow["Amount"]);

            double newBalance = bal - amt;

            BankAccount target = new BankAccount(customerName, bal);
            target.Debit(amt);

            Assert.AreEqual(newBalance, target.Balance, .00);
        }
    }
}
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Imports BankAccountNS
Imports System

Namespace TestProject1
    <TestClass()> _
    Public Class BankAccountTest

        Private testContextInstance As TestContext
        Public Property TestContext() As TestContext
            Get
                Return testContextInstance
            End Get
            Set(ByVal Value As TestContext)
                testContextInstance = Value
            End Set
        End Property

        <TestMethod()> _
        <DataSource("System.Data.OleDb", _
        "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""D:\sample.mdb""", _
        "Table1", DataAccessMethod.Sequential)> _
        Public Sub DebitTest()
            Dim customerName As String = testContextInstance.DataRow("Name").ToString()

            Dim balance As Double = Convert.ToDouble(testContextInstance.DataRow("Balance"))
            Dim amount As Double = Convert.ToDouble(testContextInstance.DataRow("Amount"))

            Dim NewBalance As Double = balance - amount

            Dim target As BankAccount = New BankAccount(customerName, balance)
            target.Debit(amount)

            Assert.AreEqual(NewBalance, target.Balance, 0.0)
        End Sub
    End Class
End Namespace

Seguridad para subprocesos

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Vea también

Referencia

Microsoft.VisualStudio.TestTools.UnitTesting (Espacio de nombres)

DataAccessMethod

Otros recursos

Cómo: Crear una prueba unitaria controlada por datos

How to: Configure a Data-Driven Unit Test

Extender metadatos mediante atributos