2011-03-30 2 views
7

이전에 MbUnit을 사용한 후에 단위 테스트를 위해 MSpec을 사용하고 있습니다.MSpec에 It 어설 션이 포함 된 메시지를 출력하는 방법

난 실패하면 출력 주장에 메시지를 추가 MbUnit에있는

Assert.IsTrue(status, "Status should be true"); 

, 즉 말을 할 수있는 사용 해요.

MSpec에서 해당 기능을 찾을 수 없습니다. 일부 XML이 유효한지 테스트 중이며 실패 할 경우 유효성 검사 오류 메시지를보고하려고합니다. 그래서 내 MSpec 코드는

string message; 

bool isValid = ValidateXml(myXml, out message); 

isValid.ShouldBeTrue(); 

처럼 보인다하지만 난 ShouldBeTrue()가 실패 할 경우 테스트 출력에 message을 추가 할 수 있어야합니다.

이것이 가능합니까?

답변

6

MSpec의 출처를 살펴보면, 아니오. 확장 메서드는 메시지의 문자열 매개 변수를 사용하지 않습니다.

코드 작성 측면에서 쉽게 기능을 추가 할 수 있습니다. 코드는 machine.specifications/Source/Machine.Specifications/ExtensionMethods.cs입니다. 내가 얼마나 세게 지을 지 모르겠다.

예를 들어, 당신은 ShouldBeFalse의 과부하를 만들 수 있고 ShouldBeTrue과 같이 :

[AssertionMethod] 
public static void ShouldBeFalse([AssertionCondition(AssertionConditionType.IS_FALSE)] this bool condition, string message) 
{ 
    if (condition) 
    throw new SpecificationException(message); 
} 

[AssertionMethod] 
public static void ShouldBeTrue([AssertionCondition(AssertionConditionType.IS_TRUE)] this bool condition, string message) 
{ 
    if (!condition) 
    throw new SpecificationException(message); 
} 
+0

아하겠습니다. 고마워, 그 코드를 사용하여 사용자 지정 메시지로 'SpecificationException'을 throw하는 새로운 확장 메서드를 작성했습니다. 그 질문에 대한 답을 무언가에 추가하고 싶다면 받아 들일 것입니다. –

1

현재이에 대한 인프라가 없지만 매트처럼 나는 MSpec의 상단에 자신의 "보고"주장을 구현하는 제안 내장 어서션 라이브러리 (아마도 <Product>.ForTesting 클래스 라이브러리에 있음).

다른 모든 경우에서, It 필드는 관찰 할 수있는 것을 알려주므로 메시지 매개 변수가 누락되었습니다.