質問

私は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"
        );
    }

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

役に立ちましたか?

解決

残念ながら、Resharper Test Runnerにはバグ/制限があります。これは、ExpectsException属性を処理しません。 2つのオプションがあります:

  1. 他のテストランナー(nunit -gui.exe、nunitで出荷された)を使用してください - しかし、このアプローチはテストをデバッグするのが苦痛になります

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

    テスト] public void write_messagelogwithcategoryinfofail(){try {string message = "info test 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を捕まえることはありません:)

他のヒント

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top