0

さて、私はJustMockに問題があり、ここの誰かが私を助けてくれることを望んでいます。私はいくつかのテストメソッド(80のようなもの)を持つクラスを持っています。これらの各メソッドを個別に実行すると、フライングカラーで合格します。ただし、大規模なテスト実行の一部として実行すると(たとえばクラス全体)失敗するメソッドがいくつかあります。

これらのテストメソッドは、JustMockモックフレームワークを使用して非パブリックメソッドをモックし、次にこれらの各プライベートメソッドを呼び出すパブリックインターフェイスメソッドを呼び出します。以下は例です

 ///<summary>
///  A test for CheckCommError
///</summary>
[TestMethod]
public void CheckCommErrorWithErrorTest()
{
    var message = new byte[] { (byte)EagleMessageTypes.SendCommError,BitConverter.GetBytes((ushort)10)[0], BitConverter.GetBytes((ushort)10)[1] };

    bool expected = false; // TODO: Initialize to an appropriate value
    bool actual;
    //mock the other members in EagleUtility that are being used...
    var target = new EagleUtility();
    bool called = true;
    Mock.NonPublic.Arrange<bool>(target, "CheckMinimumSize", ArgExpr.IsAny<BasicEagleMessage>(), Arg.AnyInt).IgnoreArguments().DoInstead(
        (BasicEagleMessage arg1, int arg2) => called = true).Returns(true).MustBeCalled();
    Mock.NonPublic.Arrange<bool>(target, "CheckMessageLength", Arg.AnyInt, ArgExpr.IsAny<BasicEagleMessage>()).IgnoreArguments().DoInstead(
        (int arg1, BasicEagleMessage arg2) => called = true).Returns(true).MustBeCalled();
    Mock.NonPublic.Arrange<bool>(target, "VerifyCheckSum", ArgExpr.IsAny<byte[]>()).IgnoreArguments().DoInstead(
        (byte[] arg1) => called = true).Returns(true).MustBeCalled();
    Mock.NonPublic.Arrange<bool>(target, "ValidateLegacyMessageType", ArgExpr.IsAny<BasicEagleMessage>()).IgnoreArguments().DoInstead(
        (BasicEagleMessage arg1) => called = true).Returns(true).MustBeCalled();
    actual = target.ValidateMessage(message, 3, TowerTypes.Tower4800);
    Assert.AreEqual(expected, actual);
    Mock.Assert(target);
}

///<summary>
///  A test for CheckMessageLength
///</summary>
[TestMethod]
public void CheckMessageLengthTest()
{
    var message = new byte[] { (byte)3, BitConverter.GetBytes((ushort)59006)[0], BitConverter.GetBytes((ushort)59006)[1], 0 };
    var byteCount = 32486;
    bool expected = true;
    bool actual;
    //mock the other members in EagleUtility that are being used...
    var target = new EagleUtility();
    bool called = true;
    Mock.NonPublic.Arrange<bool>(target, "CheckMinimumSize", ArgExpr.IsAny<BasicEagleMessage>(), Arg.AnyInt).IgnoreArguments().DoInstead(
        (BasicEagleMessage arg1, int arg2) => called = true).Returns(true).MustBeCalled();
    Mock.NonPublic.Arrange<bool>(target, "CheckCommError", ArgExpr.IsAny<BasicEagleMessage>()).IgnoreArguments().DoInstead(
        (BasicEagleMessage arg2) => called = true).Returns(true).MustBeCalled();
    Mock.NonPublic.Arrange<bool>(target, "VerifyCheckSum", ArgExpr.IsAny<byte[]>()).IgnoreArguments().DoInstead(
        (byte[] arg1) => called = true).Returns(true).MustBeCalled();
    Mock.NonPublic.Arrange<bool>(target, "ValidateLegacyMessageType", ArgExpr.IsAny<BasicEagleMessage>()).IgnoreArguments().DoInstead(
        (BasicEagleMessage arg1) => called = true).Returns(true).MustBeCalled();
    actual = target.ValidateMessage(message, byteCount, TowerTypes.Tower4800);
    Assert.AreEqual(expected, actual);
    Mock.Assert(target);
}

これらを個別に実行すると合格しますが、セットとして実行すると最初のメソッドが合格し、2番目のメソッドは失敗します。テストの実行方法(どのテストランナー)に応じて、テストメソッドはさまざまなアサーションで失敗します。mstestを使用するとAsser.AreEqualで失敗し、JustCodeテストランナーを使用するとMock.Assertで失敗します(MustBeCalledとマークされたメソッドが呼び出されていないことを示します) )。

私はMock.Initialize();を持っています。テストクラスのクラス初期化関数で。

よろしくお願いします。よろしくお願いします。

4

1 に答える 1

1

2つのリンクが役立つ場合があります。

于 2011-09-20T03:46:39.423 に答える