를 계약합니다 나는 다음과 같은 방법이 있습니다 단위 테스트는
public static DateTime SubQtrs(this DateTime dt, int qtrs)
{
Contract.Requires(qtrs > -1);
Contract.Requires((qtrs * 3) >= -120000 && (qtrs * 3) <= 120000);
// do something
}
가 나는 paramertized 단위 테스트를 생성하고 몇 가지 단위 테스트와 함께 올 PEX를 사용합니다. 예상대로 Pex는 계약 제약 조건을 테스트하고 계약을 위반 한 qtrs 값을 전달했습니다. 나는 유닛 테스트에서 ExpectedException (typeof (TraceAssertionException)) 및 모든 것이 통과 될 것이라는 예외를 기대한다고 말했다. 난 그냥 (PEX없이) MS 테스트 장치와 단위 테스트를 실행할 때
지금, 오류가 발생합니다 : Descrtipion을 : 전제 조건 실패 : (qtrs * 3> = -120000 & & ......
.. 그것은 나에게 스택 추적을 제공기본적 그럼 난 중단, 다시 시도 또는 무시하는 선택을 제공하고있어 contracthelper 실패 말해
어느 쪽이든을, 테스트가 실패하고 난 얻을 : 실패 SubQtrsThrowsTraceAssertionException818 DGALib.Extensions을 .Tests 테스트 메서드 System.ExtensionMethodsTest.SubQtrsThrowsTraceAssertionException818 예외를 Throw했습니다. System.ArgumentOutOfRangeException, 예외 Microsoft.Pex.Framework.Exceptions.TraceAssertionException이 필요합니다. 예외 메시지 : System.ArgumentOutOfRangeException : 월 값은 +/- 120000 사이 여야합니다. ...
단위 테스트에서 더 이상 코드 계약 오류를 인식하지 못하는 이유는 무엇입니까?
먼저 계약 설정을 확인했습니다. 내 테스트 프로젝트에는 런타임 계약 확인 수행이 전체로 설정되어 있습니다. 계약서를 수령하지 않는 다른 이유가있을 수 있습니다. 위에서 설명한 것처럼 계약서에 특정 예외가 발생했지만 테스트 동작이 Pex 또는 MS 테스트 유닛 자체에서 실행 되든 동일하게 작동해서는 안됩니까? ArgumentOutOfRange 예외가 DateTime.Add 메서드에 의해 throw됩니다. – Chris
@Chris, 음, 내 의심은 여전히 단위 테스트 러너에서 실행하여 무언가가 계약 재 작성 단계를 우회하게 만들었다는 것입니다. –