6

내가하고 싶은 이것이다 :Visual Studio C# 단위 테스트 - 다양한/여러 테스트 초기화로 단위 테스트 실행, 동일한 단위 테스트를 여러 번 실행 하시겠습니까?

  1. 는 단위 테스트의 무리를 만듭니다.
  2. 모의 (mock), 입력 변수 등의 초기화에 대한 다양한 순열/조합을 만듭니다.
  3. 일부 매개 변수를 기반으로 초기화로 각 주어진 단위 테스트를 실행합니다.

어떻게 이런 식으로 할 것입니까?

이미 초기화를 변경하면서 주어진 테스트를 여러 번 실행하는 프레임 워크가 있습니까? 이 일을 할 수있는 디자인이나 아이디어를 제안 해 주시겠습니까?

단위 테스트 프레임 작동을 알고 있습니다. 나는 NUnit과 Rhino를 직접 사용합니다.

다음은 내가 필요한 것의 예입니다.

[Test Initialize] 
Setup(<-possible parameter->) 

[Test Method] 
TestA() 

이제 TestA()가 여러 번 실행되기를 바랍니다. 테스트 초기화는 매번 다른 초기화 조합을 선택합니다.

추가 확인

테스트 변수에게를 요구한다고 가정하자, B, C. 그들의 각각의 조합의 다수가 형성 될 수있는 최종 결과와 매우 복잡한 객체이다. 그래서 어떻게 든 테스트 조합을 만들 수 있기를 바랄 수 있습니다. 그런 조합의리스트를 반복 할 수 있습니다. 그래서 그것들을 초기화하고, TESTA를 실행하고, 목록의 다음 초기화로 돌아가서 TESTA를 다시 실행합니다. 목록이 다 끝났어. 그런 다음 TESTB에 대한 다른 목록을 선택하고이 과정을 다시 한 번 수행합니다.

최소한 주어진 테스트 기능을 n 번 실행할 수있는 기능이 필요합니다. 나머지는 내가 할 수있는 한 빌드 할 수 있습니다.

+5

사용할 수있는 프레임 워크가 많이 있습니다.질문을하기 전에 몇 가지 검색을하십시오. – emartel

+2

내가 묻는 것을 이해합니까? 많은 프레임 워크가 있다는 것을 알고 있습니다. 두 개 또는 세 개를 사용합니다. 필요한 것은 초기화 기능이 다양 할 때 반복적으로 실행되는 주어진 단위 테스트입니다. –

답변

3

모든 테스트 함수가 포함 된 추상 기본 클래스를 만든 다음 여러 기본 클래스를 상속하여 프레임 워크 별 추가 기능없이이 작업을 수행 할 수도 있습니다 각각에는 자체 설정 기능이 있습니다.

 
public abstract class MyTests 
{ 
    [Test] 
    public void TestOne() 
    { 
     ... 
    } 

    [Test] 
    public void TestTwo() 
    { 
     ... 
    } 
} 
 
[TestFixture] 
public class FirstSetup : MyTests 
{ 
    [Setup] 
    public void Setup() 
    { 
     ... 
    } 
} 

[TestFixture] 
public class SecondSetup : MyTests 
{ 
    [Setup] 
    public void Setup() 
    { 
     ... 
    } 
} 

나는 다른 언어로 이런 짓을하지만, 다양한 C#을 프레임 워크를 처리하는 방법을 확인하지 않았습니다.

[Test] 
[TestCase("a", "b")] 
[TestCase("c", "b")] 
[TestCase("a", "d")] 
public void TestMethod(string param1, string param2){ 
    // run your test with those parameters 
} 

또는 복잡한 유형에 대한 TestCaseSource 방법을 사용할 수 있습니다 :

+0

음, 테스트 초기화 조합의 수는 내가이 접근법을 사용하지 못하도록 할 것입니다. 그들은 문자 그대로 기하 급수적 일 수 있습니다. 또는 그들이 희망하는 방법은 가능한 초기화의 목록에서 선택하는 것입니다. 저는 ' m –

+0

그렇습니다. 아마도이 방법은 효과가 없을 것입니다. –

+0

다른 한편으로는 3 가지 설정 (3 가지 시리얼 라이저)에 대해 동일한 테스트를 실행해야했으며 정확히 필요한 부분이었습니다. 감사! –

7

NUNIT에서는 간단한 유형에 대해 [TestCase에] 속성을 사용할 수 있습니다

[Test] 
[TestCaseSource("GetTestCases")] 
public void TestMethod(MyObject1 param1, MyObject2 param2){ 
    // run your test with those parameters 
} 

private IEnumerable GetTestCases(){ 
    yield return new TestCaseData(new MyObject1("first test args"), 
            new MyObject2("first test args")) 
         .SetName("SomeMeaningfulNameForThisTestCase"); 
    yield return new TestCaseData(new MyObject1("2nd test args"), 
            new MyObject2("2nd test args")) 
         .SetName("SomeMeaningfulNameForThisTestCase2"); 

} 

당신은 MS에서 비슷한 일을 할 수 있습니다 - 데이터 소스를 사용하여 테스트 : http://codeclimber.net.nz/archive/2008/01/18/How-to-simulate-RowTest-with-MS-Test.aspx

+0

이제 매우 유망 해 보입니다. 시도해 보겠습니다. :) –