2011-08-02 4 views
1

반환 테스트 NUnit과 테스트 케이스를 작성하는 방법 :문자열의 정확한 목록은 내가 좋아하는 방법이

public virtual IList<string> Validate() 
{ 
    ... 
} 

내가 단위 테스트를 사용하여이 NUnit를 원하는합니다. 이것은 차량 클래스의 일부입니다.

Vehicle은 다른 유형일 수 있습니다. 내 TestFixture의 상단에 CarBoat

Truck은 내가 VehicleTypes를 설정 :

private VehicleType[] _vehicleTypes; 

[SetUp] 
public void MyTestInitialize() 
{ 
    transScope = new TransactionScope(); 

    var boat= new VehicleType { Name = "boat" }; 
    var car = new VehicleType { Name = "car" }; 
    var truck = new VehicleType { Name = "truck" }; 

    _vehicleTypes= new VehicleType[] { boat, car, truck }; 

    ... 
} 

내가 원하는 것은 오류 메시지가 보트 만의 방법에서 다시 전송하는지 테스트하는 것입니다. 다음과 같이

내 단위 테스트는 다음과 같습니다

[TestCase(0, "This vehicle is inappropriate because it doesn't have wheels")] 
[TestCase(1, null)] 
[TestCase(2, null)] 
public void Validate_Vehicle_ReturnsAppropriateErrorMessage(int vehicleType, string expectedResult) 
{ 
    var vehicle = new Vehicle { VehicleType = _vehicleTypes[vehicleType] }; 

    var results = vehicle.Validate(); 

    string result; 

    if (results.Count == 0) 
     result = null; 
    else 
     result = results[0]; 

    Assert.IsTrue(expectedResult == result); 
} 

그래서 이것이 내가 테스트 케이스를 사용하여 테스트하려고했던 방법이었다. 그러나 단위 테스트가 ifs을 포함해서는 안되기 때문에 올바른 접근 방식인지 확신 할 수 없습니까?

또 다른 유형의 테스트를 작성하는 이상한 방법일까요?

누구든지 더 좋은 제안이 있으십니까?

답변

6

나는 이것을 여러 가지 테스트로 분해 할 것이다. 이렇게함으로써 보트뿐만 아니라 정상적인 행동 (비 보트)을 테스트 할 수있는 글을 쓸 수 있습니다. 이러한 테스트 중 하나라도 실패하면 데이터 기반 테스트의 반복이 실패했는지 파악할 필요가 없습니다. 이 테스트는 스스로를 말합니다.

이 경우 보트에 대한 동작과 보트에 대한 동작 중 하나를 작성합니다. 다른 반복은 재미없는 (그리고 likly이 테스트가 아닌 다른 보트로 확인하는 동일한 코드 경로 사용) 당신은 결과 집합 당신은뿐만 아니라 원하는 모든 데이터를 확인하기 위해 추가 검사를 추가 할 수

public void Validate_VehicleIsBoat_ReturnsAppropriateErrorMessage() 
{ 
    string expectedResult = "This vehicle is inappropriate because it doesn't have wheels"; 
    var vehicle = new Vehicle { VehicleType = VehicleType.Boat }; //or whatever it is in your enum 

    var results = vehicle.Validate(); 

    Assert.AreEqual(expectedResult, results[0]); 
} 

public void Validate_VehicleIsNotBoat_DoesNotReturnErrorMessage() 
{ 
    var vehicle = new Vehicle { VehicleType = VehicleType.Car }; //or whatever it is in your enum 

    var results = vehicle.Validate(); 

    Assert.IsNull(results); // or whatever the no error message case is. Will results[0] have an empty string? 
} 

을 .

어쨌든 도움이 되길 바랍니다.

관련 문제