2009-09-02 3 views
13

MbUnit에 Assert.Warning과 동일한 MsTest가 있습니까?mstest에서 assert.warning과 동일합니까?

+0

좋은 질문 : 테스트가 실행하지만, UnitTestWarningException에 실패했습니다 당신의 경고를 보여줍니다. MSFT는 기존의 단위 테스트 표준을 폐기하기로 결정하고 대신 다소 혼란 스러웠습니다. –

답변

13

가장 근접한 일치는 Assert.Inconclusive()입니다. 테스트를 실패로 만들지는 않지만과 마찬가지로 일치하지만 실패합니다. 그것은 불합리한이라고 불리는 세 번째 단계로 떨어집니다.

단일 불확실성 테스트는 전체 테스트 스위트가 결정적이지 않게합니다.

뿐만 아니라 사용자 정의 메시지를 지원하는 오버로드가 있습니다 나는 몇 가지 프로젝트에 NUnit과를 사용할 때

Assert.Inconclusive("Ploeh"); 
+6

Annoyingly, 불확실한 테스트는 MSTEST.EXE가 실패로 동일한 상태 코드 (1)를 반환하도록하기에 충분하므로 배치 파일을 사용하여 설정을 모두 해제하면 차이를 알 수 없습니다 더 이상 일하지 않고. –

3

나는 비슷한 문제를 가지고있다. 여기

Console.Write("Some Warning"); 
+3

Assert.Inclusclusive(); 실제로 NUnit에서 지원됩니다. http://www.nunit.org/index.php?p=utilityAsserts&r=2.5.8 –

1

입니다 사용해보십시오 내 NUNIT (나는이 질문에 대한 MSTEST이었다 알고 있지만,이 역시 작동합니다)와 경고를하는 방법에를 해킹. 늘 그렇듯이 나는 어떤 개선에도 관심이있다. 이 방법은 저를 위해 일하고 있습니다.

배경 : 테스트 자체에서 올바른 주석을 확인하는 코드가 있으며 주석을 변경하지 않고 다른 테스트를 복사하여 붙여 넣었는지 여부를 감지하는 논리가 있습니다. 이들은 경고입니다. 정상적인 Assert없이 개발자에게 보여주고 싶습니다. 실제 테스트가 실행되지 않도록 차단하고 있습니다. 일부는 테스트에 중점을두고 있으며 정리 리팩토링 단계에서는 경고를 제거합니다.

임무 : 다른 모든 어설 션을 실행 한 후에 경고 메시지를 표시합니다. 이는 개발 중에 테스트에서 일반적으로 발생하는 Assert.Fail 이후의 경고 표시까지도 의미합니다.

구현 : (모든 테스트 파일에 대한 기본 클래스를 만드는 것이 가장) :

public class BaseTestClass 
{ 
    public static StringBuilder Warnings; 

    [SetUp] 
    public virtual void Test_SetUp() 
    { 
      Warnings = new StringBuilder(); 
    } 

    [TearDown] 
    public virtual void Test_TearDown() 
    { 
     if (Warnings.Length > 0) 
     { 
      string warningMessage = Warnings.ToString(); 

      //-- cleared if there is more than one test running in the session 
      Warnings = new StringBuilder(); 
      if (TestContext.CurrentContext.Result.Status == TestStatus.Failed) 
      { 
       Assert.Fail(warningMessage); 
      } 
      else 
      { 
       Assert.Inconclusive(warningMessage); 
      } 
     } 
    } 

테스트 사용

[Test] 
public void Sample_Test() 
{ 
    if (condition) Warning.AppendLine("Developer warning"); 
    Assert.Fail("This Test Failed!"); 
} 

실제 결과 :

"This Test Failed!" 
"Developer warning" 

테스트 상태가 실패했습니다. - RED

테스트가 통과되고 경고가 표시되면, Inconclusive - YELLOW 상태가 나타납니다.

0

사용자 지정 예외를 사용할 수 있습니다.

Assert.Inclusclusive의 문제는 테스트 탐색기가 테스트가 실행되지 않았다는 것입니다. 테스트가 다른 개발자에 의해 실행되는 경우 특히, 향후 테스트를 실행할 때 오해의 소지가있을 수 있습니다 다음과 같이

enter image description here

내가 선호 왔어요 방법이다. 먼저 사용자 정의 UnitTestWarningException을 정의하십시오. 내 경고 메시지 문자열을 전달할 수 있도록 추가 생성자를 제공했습니다.인수 형식 스타일은 :

[TestMethod] 
public void TestMethod1() 
{ 
    . 
    . 
    . 
    try 
    { 
    WorkflowInvoker.Invoke(workflow1, inputDictionary); 
    } 
    catch (SqlException ex) 
    { 
    if (ex.Errors.Count > 0 
     && ex.Errors[0].Procedure == "proc_AVAILABLEPLACEMENTNOTIFICATIONInsert") 
    { 
     //Likely to occur if we try to repeat an insert during development/debugging. 
     //Probably not interested--the mail has already been sent if we got as far as that proc. 

     throw new UnitTestWarningException("Note: after sending the mail, proc_AVAILABLEPLACEMENTNOTIFICATIONInsert threw an exception. This may be expected depending on test conditions. The exception was: {0}", ex.Message); 
    } 
    } 
} 

결과 : 시험 Explorer가 다음 보여줍니다

public class UnitTestWarningException : Exception 
{ 
    public UnitTestWarningException(string Message) : base(Message) { } 

    public UnitTestWarningException(string Format, params object[] Args) : base(string.Format(Format, Args)) { } 
} 

그런 다음 경고와 단위 테스트를 종료 할 시점에서, UnitTestWarningException 대신 던져

enter image description here

관련 문제