연습: 구성 파일을 통한 데이터 소스 정의
이 연습에서는 단위 테스트를 위해 app.config 파일에 정의된 데이터 소스를 사용하는 방법을 보여 줍니다. 사용자는 DataSourceAttribute 클래스에서 사용할 수 있는 데이터 소스를 정의하는 app.config 파일을 만드는 방법을 배울 수 있습니다. 이 연습에서 수행할 작업은 다음과 같습니다.
app.config 파일 만들기
사용자 지정 구성 섹션 정의
연결 문자열 정의
데이터 소스 정의
DataSourceAttribute 클래스를 사용하여 데이터 소스에 액세스
사전 요구 사항
이 연습을 완료하려면 다음 사항이 필요합니다.
Visual Studio Premium 또는 Visual Studio Ultimate
하나 이상의 테스트 메서드에 대한 데이터를 제공할 Microsoft Access 또는 Microsoft Excel
테스트 프로젝트가 포함된 Microsoft Visual Studio 2010 솔루션
App.config 파일 만들기
프로젝트에 app.config 파일을 추가하려면
테스트 프로젝트에 이미 app.config 파일이 있는 경우 사용자 지정 구성 섹션 정의로 이동하십시오.
솔루션 탐색기에서 테스트 프로젝트를 마우스 오른쪽 단추로 클릭하고 추가를 가리킨 다음 새 항목을 클릭합니다.
새 항목 추가 창이 열립니다.
응용 프로그램 구성 파일 템플릿을 선택하고 추가를 클릭합니다.
사용자 지정 구성 섹션 정의
app.config 파일을 검사합니다. 이 파일에는 최소한 XML 선언과 루트 요소가 포함되어 있습니다.
app.config 파일에 사용자 지정 구성 섹션을 추가하려면
app.config의 루트 요소는 configuration 요소여야 합니다. configuration 요소 내에 configSections 요소를 만듭니다. configSections가 app.config 파일의 첫 번째 요소여야 합니다.
configSections 요소 내에 section 요소를 만듭니다.
section 요소에서 name 특성을 추가하고 이 특성에 microsoft.visualstudio.testtools와 동일한 값을 할당합니다. type이라는 다른 특성을 추가하고 이 특성에 Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a와 동일한 값을 할당합니다.
section 요소는 다음과 같이 됩니다.
<section name="microsoft.visualstudio.testtools" type="Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
참고
어셈블리 이름은 사용 중인 Microsoft Visual Studio .NET Framework 빌드와 일치해야 합니다. Visual Studio .NET Framework 3.5를 사용하는 경우 Version을 9.0.0.0으로 설정합니다. Visual Studio .NET Framework 2.0을 사용하는 경우에는 Version을 8.0.0.0으로 설정합니다.
연결 문자열 정의
연결 문자열은 데이터 소스 액세스에 대한 공급자 정보를 정의합니다. 구성 파일에 정의된 연결 문자열은 응용 프로그램에서 다시 사용할 수 있는 데이터 공급자 정보를 제공합니다. 이 단원에서는 사용자 지정 구성 섹션에 정의되는 데이터 소스에서 사용할 두 개의 연결 문자열을 만듭니다.
연결 문자열을 정의하려면
configSections 요소 뒤에 connectionStrings 요소를 만듭니다.
connectionStrings 요소 내에 두 개의 add 요소를 만듭니다.
첫 번째 add 요소에서 Microsoft Access 데이터베이스에 연결하는 데 사용할 다음과 같은 특성 및 값을 만듭니다.
특성 |
값 |
---|---|
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 스프레드시트에 연결하는 데 사용할 다음과 같은 특성 및 값을 만듭니다.
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>
데이터 소스 정의
데이터 소스 섹션에는 테스트 엔진이 데이터 소스에서 데이터를 검색하는 데 사용하는 네 가지 특성이 포함되어 있습니다.
name은 DataSourceAttribute가 데이터 소스를 지정하는 데 사용하는 ID를 정의합니다.
connectionString은 이전 단원인 연결 문자열 정의에서 만들어진 연결 문자열을 식별합니다.
dataTableName은 테스트에 사용할 데이터를 보관하는 테이블 또는 시트를 정의합니다.
dataAccessMethod는 데이터 소스의 데이터 값에 액세스하는 기술을 정의합니다.
이 단원에서는 단위 테스트에 사용할 두 개의 데이터 소스를 정의합니다.
데이터 소스를 정의하려면
connectionStrings 요소 뒤에 microsoft.visualstudio.testtools 요소를 만듭니다. 이 섹션은 사용자 지정 구성 섹션 정의에서 만들었습니다.
microsoft.visualstudio.testtools 요소 내에 dataSources 요소를 만듭니다.
dataSources 요소 내에 두 개의 add 요소를 만듭니다.
첫 번째 add 요소에서 Microsoft Access 데이터 소스에 대해 다음과 같은 특성 및 값을 만듭니다.
특성 |
값 |
---|---|
name |
"MyJetDataSource" |
connectionString |
"MyJetConn" |
dataTableName |
"MyDataTable" |
dataAccessMethod |
"Sequential" |
두 번째 add 요소에서 Microsoft Excel 데이터 소스에 대해 다음과 같은 특성 및 값을 만듭니다.
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.QualityTools.UnitTestFramework, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</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 데이터 소스를 만들려면
testdatasource.accdb라는 Microsoft Access 데이터베이스를 만듭니다.
testdatasource.accdb에 테이블을 만든 다음 이 테이블의 이름을 MyDataTable로 지정합니다.
Number 데이터 형식을 사용하여 MyDataTable에 Arg1이라는 필드와 Arg2라는 필드를 만듭니다.
Arg1 및 Arg2에 대해 각각 (10,50), (3,2), (6,0), (0,8), (12312,1000) 값을 갖는 다섯 개의 엔터티를 MyDataTable에 추가합니다.
데이터베이스를 저장한 다음 닫습니다.
데이터베이스의 위치를 가리키도록 연결 문자열을 변경합니다. 데이터베이스의 위치를 반영하도록 Data Source 값을 변경합니다.
Microsoft Excel 데이터 소스를 만들려면
data.xlsx라는 Microsoft Excel 스프레드시트를 만듭니다.
data.xlsx에 Sheet1이라는 시트가 없을 경우 이 시트를 만듭니다.
Sheet1에 두 개의 열 머리글을 만들고 이름을 Val1 및 Val2로 지정합니다.
Val1 및 Val2에 대해 각각 (1.1), (2.2), (3.3), (4.4), (5.0) 값을 갖는 다섯 개의 엔터티를 Sheet1에 추가합니다.
스프레드시트를 저장한 다음 닫습니다.
스프레드시트의 위치를 가리키도록 연결 문자열을 변경합니다. 스프레드시트의 위치를 반영하도록 dbq 값을 변경합니다.
app.config 데이터 소스를 사용하여 단위 테스트를 만들려면
테스트 프로젝트에 단위 테스트를 추가합니다.
자세한 내용은 기존 코드에 대한 단위 테스트 생성 및 실행을 참조하십시오.
다음 코드를 사용하여 자동 생성된 단위 테스트의 내용을 바꿉니다.
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"]); } } }
DataSource 특성을 검사합니다. app.config 파일의 설정 이름에 주의하십시오.
솔루션을 빌드하고 MyTestMethod 및 MyTestMethod2 테스트를 실행합니다.
중요
테스트가 항목에 액세스할 수 있도록 배포 디렉터리에서 데이터 소스와 같은 항목을 배포합니다.