2009-04-28 6 views
2

NUnit 및 MbUnit에는 여러 매개 변수 집합을 단일 테스트로 보낼 수있는 RowTest 특성이 있습니다.단위 테스트에서 RowTest를 사용하는 것이 좋습니다

[RowTest] 
[Row(5, 10, 15)] 
[Row(3.5, 2.7, 6.2)] 
[Row(-5, 6, 1)] 
public void AddTest(double firstNumber, double secondNumber, double result) 
{ 
    Assert.AreEqual(result, firstNumber + secondNumber); 
} 

나는이 기능의 막대한 팬이었습니다. 나는 그것을 어디에서나 사용했다. 그러나 요즘 UnitTest에서 RowTest를 사용하는 것이 좋은지 잘 모르겠습니다. 여기에 더 많은 이유가 있습니다 :

단위 테스트는 매우 간단해야합니다. 버그가있는 경우 테스트 테스트의 결과를 파악하는 데 많은 시간을 낭비하고 싶지 않습니다. 여러 행을 사용할 때, 각 행은 매개 변수의 다른 전송 세트를 가지며 다른 테스트를 수행합니다.

또한 TestDriven.NET을 사용하고 있습니다.이 도구를 사용하면 IDE, Visual Studio에서 단위 테스트를 실행할 수 있습니다. TestDrivent.NET을 사용하면 특정 행을 실행하도록 지시 할 수 없으며 모든 행을 실행합니다. 따라서 디버깅 할 때 다른 모든 행을 주석 처리하고 함께 작업하는 행만 남겨 두어야합니다. 내가 나중에 작업을해야 할 때 나를 천천히 않을거야 있다고 생각하면 난 아직도 가끔 만 RowTest 속성을 사용하는 것이 말하는

[Test] 
public void Add_with_positive_whole_numbers() 
{ 
    Assert.AreEqual(5, 10 + 15); 
} 

[Test] 
public void Add_with_one_decimal_number() 
{ 
    Assert.AreEqual(6.2, 3.5 + 2.7); 
} 

[Test] 
public void Add_with_negative_number() 
{ 
    Assert.AreEqual(1, -5 + 6); 
} 

:

여기 내 테스트 오늘을 작성하는 방법을 예입니다 .

단위 테스트에서이 기능을 사용하는 것이 좋습니다.

답변

6

예. 기본적으로 다른 입력을 통해 동일한 테스트를 반복 실행합니다 ... 각각의 고유 한 입력 조합에 대해 반복하는 번거 로움을 덜어줍니다.
'한 번만'또는 DRY 원칙을 지키는 것. 따라서이 테스트를 업데이트해야하는 경우 하나의 테스트 (여러 테스트) 만 업데이트하면됩니다.

각 행은 고유 한 집합의 대표 입력이어야합니다. 즉,이 입력은 다른 모든 입력과 다릅니다. 이 함수의 동작. RowTest는 실제로 NUnit을위한 기능에 대해 많이 묻는 질문이었습니다. MBUnit에서 시작된 것입니다 ... Schlapsi가 NUnit 확장으로 작성한 것으로 생각하고 배포 상태를 표준으로 승격 시켰습니다. NUnit GUI는 또한 GUI의 한 노드 아래에있는 모든 RowTest를 그룹화하고 어떤 입력이 실패/통과했는지 보여줍니다. 이것은 멋집니다.

'디버그 필요'의 사소한 단점은 개인적으로 내가 살 수있는 것입니다. 모든 행 속성을 일시적으로 주석 처리하고 있습니다 (우선 대부분의 경우 눈에 띄게됩니다.) ScenarioX가 실패하고 단계별 절차없이 문제를 해결할 수 있습니다. 반대로 테스트를 복사하여 고정 된 (문제가있는) 입력을 일시적으로 전달하십시오.

+1

또한 언급했는데 내 고유의 게으름과 잘 어울립니다. – Gishu

관련 문제