We recommend using Visual Studio 2017
This documentation is archived and is not being maintained.

DataSourceAttribute Class

Provides data source-specific information for data-driven testing. This class cannot be inherited.


Namespace:  Microsoft.VisualStudio.TestTools.UnitTesting
Assembly:  Microsoft.VisualStudio.QualityTools.UnitTestFramework (in Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll)

[AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple = false)]
public sealed class DataSourceAttribute : Attribute

The DataSourceAttribute type exposes the following members.

Public methodDataSourceAttribute(String)Initializes a new instance of the DataSourceAttribute class. This instance will be initialized with a data provider and connection string associated with the setting name.
Public methodDataSourceAttribute(String, String)Initializes a new instance of the DataSourceAttribute class. This instance will be initialized with a connection string and table name.
Public methodDataSourceAttribute(String, String, String, DataAccessMethod)Initializes a new instance of the DataSourceAttribute class. This instance will be initialized with a data provider, connection string, data table and data access method to access the data source.

Public propertyConnectionStringGets a value representing the connection string for the data source.
Public propertyDataAccessMethodGets the method used to access the data source.
Public propertyDataSourceSettingNameGets a value indicating the setting name used to identify data source connection information stored in a configuration file.
Public propertyProviderInvariantNameGets a value representing the data provider of the data source.
Public propertyTableNameGets a value indicating the table name providing data.
Public propertyTypeIdWhen implemented in a derived class, gets a unique identifier for this Attribute. (Inherited from Attribute.)

Public methodEqualsInfrastructure. Returns a value that indicates whether this instance is equal to a specified object. (Inherited from Attribute.)
Public methodGetHashCodeReturns the hash code for this instance. (Inherited from Attribute.)
Public methodGetTypeGets the Type of the current instance. (Inherited from Object.)
Public methodIsDefaultAttributeWhen overridden in a derived class, indicates whether the value of this instance is the default value for the derived class. (Inherited from Attribute.)
Public methodMatchWhen overridden in a derived class, returns a value that indicates whether this instance equals a specified object. (Inherited from Attribute.)
Public methodToStringReturns a string that represents the current object. (Inherited from Object.)

Public fieldStatic memberDefaultDataAccessMethodRepresents the default data access method. This field is read-only.
Public fieldStatic memberDefaultProviderNameRepresents the default data provider name. This field is read-only.

Explicit interface implemetationPrivate methodSystem#Runtime#InteropServices#_Attribute#GetIDsOfNamesMaps a set of names to a corresponding set of dispatch identifiers. (Inherited from Attribute.)
Explicit interface implemetationPrivate methodSystem#Runtime#InteropServices#_Attribute#GetTypeInfoRetrieves the type information for an object, which can be used to get the type information for an interface. (Inherited from Attribute.)
Explicit interface implemetationPrivate methodSystem#Runtime#InteropServices#_Attribute#GetTypeInfoCountRetrieves the number of type information interfaces that an object provides (either 0 or 1). (Inherited from Attribute.)
Explicit interface implemetationPrivate methodSystem#Runtime#InteropServices#_Attribute#InvokeProvides access to properties and methods exposed by an object. (Inherited from Attribute.)

The DataSourceAttribute class provides two ways to specify data source information for data-driven tests. The first way specifies information through a connection string, provider information, and source table name passed to the DataSourceAttribute.

Connection String Example:

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

The second way passes a single argument to the attribute that specifies the configuration setting located in the app.config file.

Configuration Setting Example:



Different data providers use different connection strings. The name of the provider is a part of connection string.

For more information about using the app.config file for specifying a data source, see Walkthrough: Using a Configuration File to Define a Data Source.

For more information about data-driven tests, see Data-Driven Unit Tests.

For more information about using attributes, see Extending Metadata Using Attributes.

The following code contains the class and method to test.

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;

The following test will pass. It uses the sample.mdb access database that contains the following data in Table1.




Jorg Bott



Pedro Ruivo



Mandar Samant



Russell King



Jun Cao



Note that the DataAccessMethod is sequential.

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

namespace MyCSTestProject
    public class BankAccountTest
        private TestContext testContextInstance;
        public TestContext TestContext
            get { return testContextInstance; }
            set { testContextInstance = value; }

        [DataSource("System.Data.OleDb""Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"C:\\sample.mdb\"",
        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);

            Assert.AreEqual(newBalance, target.Balance, .00);

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.