연습: 구성 파일을 통한 데이터 원본 정의

이 연습에서는 app.config 파일에 정의된 데이터 원본을 유닛 테스트에 사용하는 방법을 설명합니다. DataSourceAttribute 클래스에 사용될 수 있는 데이터 원본을 정의하는 app.config 파일을 만드는 방법을 알아봅니다. 이 연습에서 수행할 작업은 다음과 같습니다.

  • app.config 파일 만들기

  • 사용자 지정 구성 섹션 정의

  • 연결 문자열 정의

  • 데이터 원본 정의

  • DataSourceAttribute 클래스를 사용하여 데이터 원본 액세스

참고 항목

DataSourceAttribute는 현재 .NET Framework에서만 지원됩니다.

필수 조건

이 연습을 완료하려면 다음이 필요합니다.

  • Visual Studio Enterprise

  • 하나 이상의 테스트 메서드를 위한 데이터를 제공할 Microsoft Access 또는 Microsoft Excel

  • 테스트 프로젝트가 포함된 Visual Studio 솔루션

프로젝트에 app.config 파일 추가

  1. 테스트 프로젝트에 이미 app.config 파일이 있는 경우 사용자 지정 구성 섹션 정의로 이동합니다.

  2. 솔루션 탐색기에서 테스트 프로젝트를 마우스 오른쪽 단추로 클릭한 다음, 추가>새 항목을 선택합니다.

    새 항목 추가 창이 열립니다. 모든 항목 템플릿이 표시되지 않으면 모든 템플릿 표시를 선택한 다음 항목 템플릿을 선택합니다.

  3. 애플리케이션 구성 파일 템플릿을 선택하고 추가를 클릭합니다.

사용자 지정 구성 섹션 정의

app.config 파일을 검토합니다. XML 선언과 루트 요소는 반드시 포함되어야 합니다.

app.config 파일에 사용자 지정 구성 섹션을 추가하려면

  1. app.config의 루트 요소는 구성 요소여야 합니다. configuration 요소 내에 configSections 요소를 만듭니다. configSectionsapp.config 파일의 첫 번째 요소여야 합니다.

  2. configSections 요소 내에 section 요소를 만듭니다.

  3. section 요소에서 name이라는 특성을 추가하고 여기에 microsoft.visualstudio.testtools 값을 할당합니다. type이라는 다른 특성을 추가하고 여기에 Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions 값을 할당합니다.

section 요소는 다음과 유사하게 표시됩니다.

<section name="microsoft.visualstudio.testtools" type="Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions" />

참고 항목

어셈블리 이름이 사용 중인 버전과 일치해야 합니다.

연결 문자열 정의

연결 문자열은 데이터 소스 액세스를 위한 공급자 특정 정보를 정의합니다. 구성 파일에 정의된 연결 문자열은 애플리케이션 전체에서 재사용 가능한 데이터 공급자 정보를 제공합니다. 이 섹션에서는 사용자 지정 구성 섹션에 정의된 데이터 원본에서 사용되는 두 개의 연결 문자열을 만듭니다.

연결 문자열을 정의하려면

  1. configSections 요소 뒤에 connectionStrings 요소를 만듭니다.

  2. connectionStrings 요소 내에 두 개의 add 요소를 만듭니다.

  3. 첫 번째 add 요소에서 Microsoft Access 데이터베이스에 연결하기 위한 다음과 같은 특성 및 값을 만듭니다.

Attribute
name "MyJetConn"
connectionString "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\testdatasource.accdb; Persist Security Info=False;"
providerName "System.Data.OleDb"

두 번째 add 요소에서 Microsoft Excel 스프레드시트에 연결하기 위한 다음과 같은 특성 및 값을 만듭니다.

Attribute
name "MyExcelConn"
connectionString "Dsn=Excel Files;dbq=data.xlsx;defaultdir=.\; driverid=790;maxbuffersize=2048;pagetimeout=5"
providerName "System.Data.Odbc"

connectionStrings 요소는 다음과 유사하게 표시됩니다.

<connectionStrings>
    <add name="MyJetConn" connectionString="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\testdatasource.accdb; Persist Security Info=False;" providerName="System.Data.OleDb" />
    <add name="MyExcelConn" connectionString="Dsn=Excel Files;dbq=data.xlsx;defaultdir=.\; driverid=790;maxbuffersize=2048;pagetimeout=5" providerName="System.Data.Odbc" />
</connectionStrings>

데이터 원본 정의

데이터 원본 섹션에는 테스트 엔진이 데이터 원본에서 데이터를 검색할 때 사용하는 4개의 특성이 포함되어 있습니다.

  • nameDataSourceAttribute가 사용할 데이터 원본을 지정하는 데 사용하는 ID를 정의합니다.

  • connectionString은 이전 연결 문자열 정의 섹션에서 만든 연결 문자열을 식별합니다.

  • dataTableName은 테스트에 사용할 데이터가 들어 있는 테이블 또는 시트를 정의합니다.

  • dataAccessMethod는 데이터 원본에 있는 데이터 값에 액세스하는 기술을 정의합니다.

이 섹션에서는 단위 테스트에 사용할 두 개의 데이터 원본을 정의합니다.

데이터 원본을 정의하려면

  1. connectionStrings 요소 뒤에 microsoft.visualstudio.testtools 요소를 만듭니다. 이 섹션은 사용자 지정 구성 섹션 정의에서 만들어졌습니다.

  2. microsoft.visualstudio.testtools 요소 내에서 dataSources 요소를 만듭니다.

  3. dataSources 요소 내에 두 개의 add 요소를 만듭니다.

  4. 첫 번째 add 요소에서 Microsoft Access 데이터 원본에 대해 다음과 같은 특성 및 값을 만듭니다.

Attribute
name "MyJetDataSource"
connectionString "MyJetConn"
dataTableName "MyDataTable"
dataAccessMethod "Sequential"

두 번째 add 요소에서 Microsoft Excel 데이터 원본에 대해 다음과 같은 특성 및 값을 만듭니다.

Attribute
Name "MyExcelDataSource"
connectionString "MyExcelConn"
dataTableName "Sheet1$"
dataAccessMethod "Sequential"

microsoft.visualstudio.testtools 요소는 다음과 유사하게 표시됩니다.

<microsoft.visualstudio.testtools>
    <dataSources>
        <add name="MyJetDataSource" connectionString="MyJetConn" dataTableName="MyDataTable" dataAccessMethod="Sequential"/>
        <add name="MyExcelDataSource" connectionString="MyExcelConn" dataTableName="Sheet1$" dataAccessMethod="Sequential"/>
    </dataSources>
</microsoft.visualstudio.testtools>

최종 app.config 파일은 다음과 유사하게 표시됩니다.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="microsoft.visualstudio.testtools" type="Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions" />
    </configSections>
    <connectionStrings>
        <add name="MyJetConn" connectionString="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\testdatasource.accdb; Persist Security Info=False;" providerName="System.Data.OleDb" />
        <add name="MyExcelConn" connectionString="Dsn=Excel Files;dbq=data.xlsx;defaultdir=.\; driverid=790;maxbuffersize=2048;pagetimeout=5" providerName="System.Data.Odbc" />
    </connectionStrings>
    <microsoft.visualstudio.testtools>
        <dataSources>
            <add name="MyJetDataSource" connectionString="MyJetConn" dataTableName="MyDataTable" dataAccessMethod="Sequential"/>
            <add name="MyExcelDataSource" connectionString="MyExcelConn" dataTableName="Sheet1$" dataAccessMethod="Sequential"/>
        </dataSources>
    </microsoft.visualstudio.testtools>
</configuration>

app.config에 정의된 데이터 원본을 사용하는 단위 테스트 만들기

이제 app.config 파일을 정의했으므로 app.config 파일에 정의된 데이터 원본에 있는 데이터를 사용하는 단위 테스트를 만듭니다. 이 섹션에서는 다음을 수행합니다.

  • app.config 파일에 있는 데이터 원본을 만듭니다.

  • 각 데이터 원본의 값을 비교하는 두 개의 테스트 메서드에서 데이터 원본을 사용합니다.

Microsoft Access 데이터 원본을 만들려면

  1. testdatasource.accdb라는 Microsoft Access 데이터베이스를 만듭니다.

  2. testdatasource.accdb에 테이블을 만들고 이름을 MyDataTable로 지정합니다.

  3. Number 데이터 형식을 사용하여 이름이 Arg1Arg2인 두 개의 필드를 MyDataTable에 만듭니다.

  4. Arg1Arg2에 다음과 같은 값을 사용한 5개의 엔터티를 MyDataTable에 추가합니다. (10,50), (3,2), (6,0), (0,8), (12312,1000)

  5. 데이터베이스를 저장한 후 닫습니다.

  6. 데이터베이스의 위치를 가리키도록 연결 문자열을 변경합니다. 데이터베이스의 위치를 반영하여 Data Source의 값을 변경합니다.

Microsoft Excel 데이터 원본을 만들려면

  1. data.xlsx라는 Microsoft Excel 스프레드시트를 만듭니다.

  2. data.xlsx에 없는 경우 Sheet1이라는 시트를 만듭니다.

  3. Sheet1에 두 개의 열 머리글을 만들고 Val1Val2로 이름을 지정합니다.

  4. Val1Val2에 다음과 같은 값을 사용한 5개의 엔터티를 Sheet1에 추가합니다. (1,1), (2,2), (3,3), (4,4), (5,0)

  5. 스프레드시트를 저장한 후 닫습니다.

  6. 스프레드시트의 위치를 가리키도록 연결 문자열을 변경합니다. 스프레드시트의 위치를 반영하여 dbq의 값을 변경합니다.

app.config 데이터 원본을 사용하여 단위 테스트를 만들려면

  1. 테스트 프로젝트에 단위 테스트를 추가합니다.

  2. 자동 생성된 단위 테스트 콘텐츠를 다음 코드로 바꿉니다.

    using System;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    
    namespace TestProject1
    {
         [TestClass]
        public class UnitTest1
        {
            private TestContext context;
    
            public TestContext TestContext
            {
                get { return context; }
                set { context = value; }
            }
    
            [TestMethod()]
            [DeploymentItem("MyTestProject\\testdatasource.accdb")]
            [DataSource("MyJetDataSource")]
            public void MyTestMethod()
            {
                int a = Int32.Parse(context.DataRow["Arg1"].ToString());
                int b = Int32.Parse(context.DataRow["Arg2"].ToString());
                Assert.AreNotEqual(a, b, "A value was equal.");
            }
    
            [TestMethod()]
            [DeploymentItem("MyTestProject\\data.xlsx")]
            [DataSource("MyExcelDataSource")]
            public void MyTestMethod2()
            {
                Assert.AreEqual(context.DataRow["Val1"], context.DataRow["Val2"]);
            }
        }
    }
    
  3. DataSource 특성을 검토합니다. app.config 파일에서 설정 이름을 확인합니다.

  4. 솔루션을 빌드하고 MyTestMethod 및 MyTestMethod2 테스트를 실행합니다.

Important

테스트에서 배포 디렉터리를 통해 액세스할 수 있도록 데이터 원본과 같은 항목을 배포합니다.