Модульный тест проходит только со свойством setter, но при этом просто добавляется getter к свойству - PullRequest
1 голос
/ 22 ноября 2011

Недавно я создал тест для свойства, содержащего только установщик, сегодня я изменил свойство, добавив в интерфейс метод получения, и тестовый пример не прошел.

Я создал сводный пример его работы и сбоя, который приведен ниже. Я не уверен, что это мое невежество или, возможно, ошибка в Rhino.Mocks или NUnit, которая представляет такое поведение.

Я бы оценил любой ввод.

Я использую Visual Studio 2010 в Windows 7 64bit. Я использую Rhino.Mocks 3.6 (пробовал 2.6 build 21 для тех же результатов) Я использую NUnit-2.5.10.11092

using NUnit.Framework;
using Rhino.Mocks;
using Rhino.Mocks.Constraints;

namespace PropertyTestFailure
{
    public interface ITest
    {
        int SetOnlyProperty { set; }
        int SetGetProperty { get;  set; }
    }

    /// <summary>
    /// The property with getter fails.
    /// It appears purely adding the getter that breaks things.
    /// </summary>
    [TestFixture]
    public class TestCase
    {
        [Test]
        public void SetOnlyPropertyWorks()
        {
            var mockTest = MockRepository.GenerateStub<ITest>();

            mockTest.SetOnlyProperty = 23;

            mockTest.AssertWasCalled(x => x.SetOnlyProperty
                = Arg<int>.Matches(new PredicateConstraint<int>(y => y == 23)));
        }

        [Test]
        public void SetGetPropertyFails()
        {
            var mockTest = MockRepository.GenerateStub<ITest>();

            mockTest.SetGetProperty = 24;

            mockTest.AssertWasCalled(x => x.SetGetProperty
                = Arg<int>.Matches(new PredicateConstraint<int>(y => y == 24)));
        }
    }
}

Сообщение об ошибке.

SetGetPropertyFails : FailedRhino.Mocks.Exceptions.ExpectationViolationException : ITest.set_SetGetProperty(Predicate (TestCase.<SetGetPropertyFails>b__5(obj);)); Expected #1, Actual #0.
at Rhino.Mocks.RhinoMocksExtensions.AssertWasCalled(T mock, Action`1 action, Action`1 setupConstraints)
at PropertyTestFailure.TestCase.SetGetPropertyFails() in TestCase.cs: line 40 

Ответы [ 2 ]

1 голос
/ 22 ноября 2011

Изменение

MockRepository.GenerateStub<ITest>();

до

MockRepository.GenerateMock<ITest>();

Как правило, если вы хотите утверждать о поведении с ожиданием, вам понадобится насмешка, а не заглушка. Заглушка создаст свои собственные методы получения и установки, которые не могут проверить поведение.

Вы также можете упростить AssertWasCalled до:

mockTest.AssertWasCalled(x => x.SetGetProperty = 24);
1 голос
/ 22 ноября 2011

Объект-заглушка имеет поведение свойств по умолчанию для получения / установки свойств чтения / записи. Вместо этого вы можете использовать DynamicMock для явной обработки свойств.

...