2013-03-20 3 views
1

2 또는 4와 같은 모든 기대 값에 대해이 값을 단위 테스트 메서드의 매개 변수로 전달하고 싶습니다. 그러나 매개 변수가 올바르지 않다는 예외가 있습니다. countExpected 매개 변수를 제거하면 유닛 테스트가 잘 실행됩니다. countWrite를 어설 션 할 수 없습니다.nunit 및 TestCaseSource 및 TestCaseData를 사용하여 복잡한 행 테스트 설정

이 시나리오는 NUnit에서 모두 가능합니까?

[Test, TestCaseSource("VisibleWeekDays")] 
public void Test(DayOfWeek[] visibleWeekDaysSetup, int countExpected) 
{ 
    // ARRANGE 

    // ACT 

    // ASSERT 
    Assert.That(periods.Count(),Is.EqualTo(countExpected)); 
} 

private static IEnumerable<TestCaseData> VisibleWeekDays 
{ 
    get 
    { 
     yield return new TestCaseData(new DayOfWeek[] {DayOfWeek.Sunday}).Returns(2); 
     yield return new TestCaseData(new DayOfWeek[] {DayOfWeek.Sunday, DayOfWeek.Monday}).Returns(4); 
     // more days... 
    } 
} 

답변

5

참조 설명 here는 :

.Returns
예상 결과 호환되는 반환 형식이 있어야합니다 방법에서 반환합니다. 당신이 TestCaseData.Returns()을 사용하려는 경우

그래서, 당신은 다음과 같은 테스트를 작성해야합니다

[Test, TestCaseSource("VisibleWeekDays")] 
public int Test(DayOfWeek[] visibleWeekDaysSetup) 
{ 
    // ARRANGE 

    // ACT 

    // ASSERT 
    return periods.Count(); 
} 

UPDATE :
매개 변수로 예상 값을 전달하려면, 정기적 인 테스트 케이스 데이터로 전달해야합니다. 예보기 :

[Test, TestCaseSource("VisibleWeekDays")] 
public void Test(DayOfWeek[] visibleWeekDaysSetup, int countExpected) 
{ 
    ... 

    Assert.That(periods.Count(),Is.EqualTo(countExpected)); 
} 

private static IEnumerable<TestCaseData> VisibleWeekDays 
{ 
    get 
    { 
     yield return new TestCaseData(new DayOfWeek[] {DayOfWeek.Sunday}, 2); 
     yield return new TestCaseData(new DayOfWeek[] {DayOfWeek.Sunday, DayOfWeek.Monday}, 4); 
     // more days... 
    } 
} 
+0

감사합니다. 매우 이상하게 보입니다. 왜 내 expectedCount를 메서드 매개 변수로 반환 할 수 없는지 이해할 수 없습니다. 읽고 이해하는 것이 훨씬 쉬워야합니다. – Elisabeth

+3

답변을 업데이트했습니다. 기대 값을 매개 변수로 전달하는 방법을 보여주는 또 다른 예가 제공됩니다. –