4

私はTDDを初めて使用し、NUnitとMoqを使用しています。例外が予想されるメソッドがあるので、フレームワークの機能を少し試してみました。

私のテストコードは次のようになります。

    [Test]
    [ExpectedException(ExpectedException = typeof(MockException), ExpectedMessage = "Actual differs from expected")]
    public void Write_MessageLogWithCategoryInfoFail()
    {
        string message = "Info Test Message";

        Write_MessageLogWithCategory(message, "Info");

        _LogTest.Verify(writeMessage =>
            writeMessage.Info("This should fail"),
            "Actual differs from expected"
        );
    }

しかし、実際の例外メッセージが予想されるメッセージと異なるというエラーメッセージを常に受け​​取ります。私は何を間違っていますか?

4

2 に答える 2

3

残念ながら、Resharper テスト ランナーにはバグ/制限があります。ExpectedException 属性を処理しません。次の 2 つのオプションがあります。

  1. 他のテスト ランナー (NUnit に同梱されている nunit-gui.exe など) を使用しますが、このアプローチではテストのデバッグが面倒になります

  2. 次のパターンを使用して、例外を手動でキャッチして検証します。

    [テスト] public void Write_MessageLogWithCategoryInfoFail() { try { string message = "情報テスト メッセージ";

      Write_MessageLogWithCategory(message, "Info");
    
      _LogTest.Verify(writeMessage =>
          writeMessage.Info("This should fail"),
          "Actual differs from expected"
      );
      Assert.Fail("Expected exception");
    }
    catch(MockException e)
    {
      Assert.AreEqual("Actual differs from expected", e.Message);
    }
    

    }

例外が発生することを期待していると説明する方法の方がはるかに優れているため、これは本当に残念です。

余談ですが、上記のコードがフレームワークで遊ぶためだけのものであることを願っています-通常、MockExceptionsをキャッチすることは決してありません:)

于 2010-06-09T14:43:05.087 に答える
2

追加のパラメータを使用できますMatchType = MessageMatch.Regex

于 2012-07-15T18:41:31.253 に答える