방법: 데이터 기반 단위 테스트 만들기
관리 코드에 대 한 Microsoft 단위 테스트 프레임 워크를 사용 하 여 단위 테스트 메서드를 테스트 메서드에서 데이터 소스에서 사용 되는 값을 검색 하려면 설정할 수 있습니다.메서드는 연속적으로 쉽게 단일 메서드를 사용 하 여 다양 한 입력 테스트 하려면 데이터 원본의 각 행에 대해 실행 됩니다.
이 항목에는 다음과 같은 단원이 포함되어 있습니다.
데이터 기반 단위 테스트를 만드는 다음 단계를 수행 해야 합니다.
테스트 메서드를 사용 하 여 값이 포함 된 데이터 소스를 만듭니다.데이터 원본 테스트를 실행 하는 컴퓨터에 등록 된 모든 형식을 수 있습니다.
추가 개인 TestContext 필드와 공용 TestContext 테스트 클래스의 속성입니다.
단위 테스트 메서드를 만들고 추가 DataSourceAttribute 특성에 해당 합니다.
사용 하는 DataRow 테스트에 사용 되는 값을 검색할 수 있는 인덱서 속성.
테스트 대상 메서드
예를 들어 우리가 만들었다고 가정해 봅시다.
솔루션 이라는 MyBank 허용 하 고 다른 종류의 계정에 대 한 트랜잭션을 처리 합니다.
프로젝트에 MyBank 라는 BankDb 는 계정에 대 한 트랜잭션을 관리 합니다.
클래스 라는 Maths 에 있는 DbBank 모든 트랜잭션 은행을 만들어낼 수 있도록 수학 함수를 수행 하는 프로젝트.
단위 테스트 프로젝트 라는 BankDbTests 의 동작을 테스트 하는 BankDb 구성 요소입니다.
단위 테스트 라는 클래스 MathsTests 의 동작을 확인 하는 Maths 클래스입니다.
우리는 메서드에서 테스트 합니다 Maths 루프를 사용 하 여 두 정수를 추가 합니다.
public int AddIntegers(int first, int second)
{
int sum = first;
for( int i = 0; i < second; i++)
{
sum += 1;
}
return sum;
}
데이터 소스 만들기
테스트는 AddIntegers 메서드를 우리가 매개 변수와 반환할 예상 되는 합계에 대 한 값 범위를 지정 하는 데이터 원본 만들기.이 예에서 우리가 라는 컴팩트 Sql 데이터베이스 만들기 MathsData 및 라는 테이블 AddIntegersData 다음 열 이름 및 값을 포함
FirstNumber |
SecondNumber |
합계 |
---|---|---|
0 |
1 |
1 |
1 |
1 |
2 |
2 |
-3 |
-1 |
테스트 클래스의 TestContext 추가
단위 테스트 프레임 워크는 TestContext 데이터 기반 테스트에 대 한 데이터 원본 정보를 저장 하는 개체입니다.프레임 워크 다음이 개체의 값으로 설정 하는 TestContext 만들 속성.
private TestContext testContextInstance;
public TestContext TestContext
{
get { return testContextInstance; }
set { testContextInstance = value; }
}
테스트 메서드를 통해 데이터를 액세스를 DataRow 의 인덱서 속성의 TestContext.
테스트 메서드를 작성합니다.
테스트 메서드를 AddIntegers 은 매우 간단 합니다.데이터 소스의 각 행에 대해 우리를 호출 합니다. AddIntegers 에 FirstNumber 및 SecondNumber 우리 대 한 반환 값을 확인 하 고 열 값을 매개 변수로 합계 열 값:
[DataSource(@"Provider=Microsoft.SqlServerCe.Client.4.0; Data Source=C:\Data\MathsData.sdf;", "Numbers")]
[TestMethod()]
public void AddIntegers_FromDataSourceTest()
{
var target = new Maths();
// Access the data
int x = Convert.ToInt32(TestContext.DataRow["FirstNumber"]);
int y = Convert.ToInt32(TestContext.DataRow["SecondNumber"]);
int expected = Convert.ToInt32(TestContext.DataRow["Sum"]);
int actual = target.IntegerMethod(x, y);
Assert.AreEqual(expected, actual,
"x:<{0}> y:<{1}>",
new object[] {x, y});
}
이때의 Assert 메서드를 표시 하는 메시지를 포함는 x 및 y 값의 실패를 반복 합니다.기본적으로 설정 된 값을 expected 및 actual, 이미 실패 한 테스트의 세부 정보에 포함 되어 있습니다.
Datasourceattribute를 지정합니다.
DataSource 특성 테스트 메서드에서 데이터 소스 및 사용할 테이블의 이름에 대 한 연결 문자열을 지정 합니다.연결 문자열의 정확한 정보는 사용 중인 데이터 소스의 종류에 따라 달라집니다.이 예제에서는 SqlServerCe 데이터베이스에 사용 되는.
[DataSource(@"Provider=Microsoft.SqlServerCe.Client.4.0;Data Source=C:\Data\MathsData.sdf", "AddIntegersData")]
DataSource 특성에는 세 명의 생성자가 있습니다.
[DataSource(dataSourceSettingName)]
매개 변수 중 하나를 사용 하 여 생성자 솔루션의 app.config 파일에 저장 된 연결 정보를 사용 합니다.DataSourceSettingsName 연결 정보를 지정 하는 구성 파일의 Xml 요소 이름입니다.
App.config 파일을 사용 하 여 단위 테스트를 변경 하지 않고 데이터 원본의 위치를 변경할 수 있습니다.만들고 있는 app.config 파일을 사용 하는 방법에 대 한 내용은 참조 하십시오.연습: 구성 파일을 통한 데이터 소스 정의
[DataSource(connectionString, tableName)]
DataSource 두 개의 매개 변수를 가진 생성자 테스트 메서드에 대 한 데이터가 들어 있는 테이블의 이름과 데이터 원본에 대 한 연결 문자열을 지정 합니다.
연결 문자열 형식 데이터 원본의 유형에 따라 달라 집니다 있지만 고정 데이터 공급자의 이름을 지정 하는 공급자 요소를 포함 해야 합니다.
[DataSource(
dataProvider,
connectionString,
tableName,
dataAccessMethod
)]
Testcontext.datarow를 사용 하 여 데이터에 액세스 하려면
데이터에 액세스 하는 AddIntegersData 테이블에서 사용 하는 TestContext.DataRow 인덱서.DataRow되는 DataRow 우리 인덱스나 열 이름으로 열 값을 검색할 개체입니다.값을 개체로 반환 됩니다 때문에 적절 한 형식으로 변환할 필요 합니다.
int x = Convert.ToInt32(TestContext.DataRow["FirstNumber"]);
테스트 실행 및 결과 보기
테스트 메서드를 작성 한 후에 테스트 프로젝트를 빌드하십시오.테스트 메서드가 테스트 탐색기 창에 표시를 테스트 실행 하지 그룹.실행, 쓰기 및 테스트를 다시 실행 하면 그룹에 탐색기 테스트 결과가 표시 됩니다 테스트 실패, 테스트 통과, 및 테스트 실행 하지.선택할 수 있습니다 를 실행 하는 모든 모든 테스트를 실행 하거나 선택할 수 실행... 실행할 테스트의 하위 집합을 선택할 수 있습니다.
테스트가 실행 될 때 테스트 결과 표시줄 탐색기의 위쪽에 애니메이션이 적용 됩니다.테스트에 실패 한 경우 테스트 실행을 마치면 모든 테스트가 통과 된 경우 녹색 또는 빨강 막대가 됩니다.테스트 실행의 요약 테스트 탐색기 창의 아래쪽에 있는 세부 정보 창에 표시 됩니다.아래쪽 창에 해당 테스트의 세부 정보를 보려면 테스트를 선택 합니다.
실행 하는 경우는 AddIntegers_FromDataSourceTest 메서드 예제에서 결과 표시줄 빨간색으로 바뀌고 이동 된 테스트 메서드는 테스트 실패 이면 실패 이터레이션되 메서드는 데이터를 원본 데이터 기반 테스트에 실패 합니다.테스트 탐색기 창에는 실패 한 데이터 기반 테스트를 선택 하면 세부 정보 창에 데이터 행 인덱스로 식별 되는 각 반복 결과 표시 합니다.이 예에서 나타납니다은 AddIntegers 알고리즘 음수 값 올바르게 처리 하지 않습니다.
때 테스트 대상 메서드를 수정 하 고 테스트를 다시 실행 결과 막대 녹색 바뀌고 테스트 메서드가 이동의 테스트 통과 그룹.
참고 항목
참조
Microsoft.VisualStudio.TestTools.UnitTesting.DataSourceAttribute
Microsoft.VisualStudio.TestTools.UnitTesting.TestContext
Microsoft.VisualStudio.TestTools.UnitTesting.Assert
개념
관리 코드용 Microsoft 단위 테스트 프레임워크를 사용하여 .NET Framework용 단위 테스트 작성