2009-09-02 12 views
13

MbUnitにAssert.WarningのMsTestに相当するものがありますか?mstestのassert.warningに相当しますか?

+0

良い質問:テストが実行されますが、UnitTestWarningExceptionで失敗してきたこと、あなたの警告を示しています。 MSFTは、既存の単体テスト標準を破棄することにしました。 –

答えて

13

最も近い一致はAssert.Inconclusive()です - テストを行わないこのように、も失敗します。それは、という結論外の第3段階に入ります。

単一の不確定テストでは、テストスイート全体が非決定的になります。

だけでなく、カスタムメッセージをサポートオーバーロードがあります:私はいくつかのプロジェクトのためのNUnitを使用するよう

Assert.Inconclusive("Ploeh"); 
+6

Annoyingly、Inconclusiveテストでは、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を定義します。私は私の警告メッセージ文字列を渡すことができるように私に追加のコンストラクタを与えました。あなたの代わりにUnitTestWarningExceptionを投げ、警告でユニットテストを終了したいポイントで

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

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

次に、::フォーマットスタイルの引数を持つ

[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が、その後することを示しています

enter image description here

関連する問題