20

MbUnitにAssert.Warningと同等のMsTestはありますか?

4

4 に答える 4

22

最も近い一致はAssert.Inconclusive()、テスト自体が失敗することはありませんが、成功することもありません。それは、不確定と呼ばれる第3段階に分類されます。

単一の不確定テストにより、テストスイート全体が不確定になります。

カスタムメッセージもサポートするオーバーロードがあります。

Assert.Inconclusive("Ploeh");
于 2009-09-03T08:27:28.320 に答える
2

一部のプロジェクトでNUnitを使用するのと同様の問題があります。使ってみてください

Console.Write("Some Warning");
于 2010-04-05T13:54:57.610 に答える
2

カスタム例外を使用することをお勧めします。

Assert.Inconclusiveの問題は、テストエクスプローラーがテストが実行されていないと述べていることです。これは、特にテストが他の開発者によって実行される場合、将来テストを実行するときに誤解を招く可能性があります。

ここに画像の説明を入力してください

私が好むようになった方法は次のとおりです。まず、カスタムを定義しますUnitTestWarningException。警告メッセージString.Format-styleを引数付きで渡すことができるように、追加のコンストラクターを指定しました。

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

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

次に、警告を表示して単体テストを終了するポイントで、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);
    }
  }
}

UnitTestWarningException結果:テストエクスプローラーはテストが実行されたことを示しますが、警告を示すで失敗しました:

ここに画像の説明を入力してください

于 2016-09-02T07:46:27.443 に答える
1

これがnunitで警告を出す方法についての私のハックです(この質問はmstestに関するものでしたが、これも機能するはずです)。いつものように、私はどんな改善にも興味があります。この方法は私のために働いています。

背景:テスト自体で正しいコメントをチェックし、コメントを変更せずに誰かが別のテストをコピーして貼り付けたかどうかを検出するロジックを備えたコードがあります。これらは、通常のアサートなしで開発者に表示したい警告です。実際のテストの実行をブロックすることはできません。一部はテストに焦点を合わせており、クリーンアップリファクタリングフェーズは警告を削除することです。

ミッション:他のすべてのアサートが実行された後に警告を出すこと。これは、開発中のテストで通常発生する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" 

テストのステータスが失敗しました-赤

テストに合格し、警告が表示された場合は、「不確定-黄色」のステータスが表示されます。

于 2013-12-12T23:20:18.897 に答える