MbUnitにAssert.Warningと同等のMsTestはありますか?
4 に答える
最も近い一致はAssert.Inconclusive()
、テスト自体が失敗することはありませんが、成功することもありません。それは、不確定と呼ばれる第3段階に分類されます。
単一の不確定テストにより、テストスイート全体が不確定になります。
カスタムメッセージもサポートするオーバーロードがあります。
Assert.Inconclusive("Ploeh");
一部のプロジェクトでNUnitを使用するのと同様の問題があります。使ってみてください
Console.Write("Some Warning");
カスタム例外を使用することをお勧めします。
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
結果:テストエクスプローラーはテストが実行されたことを示しますが、警告を示すで失敗しました:
これが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"
テストのステータスが失敗しました-赤
テストに合格し、警告が表示された場合は、「不確定-黄色」のステータスが表示されます。