8

以前に MbUnit を使用した後、単体テストにMSpecを使用しています。

言い慣れてる

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

つまり、失敗した場合に出力されるアサーションにメッセージを追加します。

MSpec に対応する機能が見つかりません。一部の XML が検証されることをテストしており、失敗した場合は、検証エラー メッセージを報告したいと考えています。だから私のMSpecコードは次のようになります

string message;

bool isValid = ValidateXml(myXml, out message);

isValid.ShouldBeTrue();

messageしかし、失敗した場合にテスト出力に追加できるようにしたいと考えていShouldBeTrue()ます。

これは可能ですか?

4

2 に答える 2

7

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);
}
于 2011-03-30T11:18:24.393 に答える
1

現時点ではこのためのインフラストラクチャはありませんが、MSpec のビルトイン アサーション ライブラリ (おそらく<Product>.ForTestingクラス ライブラリ) の上に独自の「レポート」アサーションを実装することをお勧めします。

それ以外の場合はすべて、Itフィールドは観察可能であるべきことを示しているため、メッセージ パラメータが欠落しています。

于 2011-03-30T12:04:25.823 に答える