Проблемы с JustMock и большими тестами - PullRequest
0 голосов
/ 06 июня 2011

Хорошо, у меня проблема с 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);
}

Когда я запускаю каждый из них по отдельности, они проходят, но при запуске в виде набора первый метод проходит, а второй не выполняется.В зависимости от того, как я запускаю тест (какой тестовый исполнитель), метод теста завершается с ошибкой на разных утверждениях, при использовании mstest он завершается с ошибкой в ​​Asser.AreEqual, а при использовании JustCode testrunner он завершается с ошибкой в ​​Mock.Assert (утверждая, что методы, помеченные как MustBeCalled, не вызывают).

У меня есть Mock.Initialize ();в моей функции инициализатора класса для тестового класса.

Я ценю любую помощь и заранее всех благодарю.

1 Ответ

1 голос
/ 20 сентября 2011
...