Я пытаюсь утверждать, что свойство в фиктивном объекте было установлено с заданным типом.Свойство имеет абстрактный тип и задается с одним из нескольких конкретных типов.
Это то, что я пытаюсь сделать, и оно всегда проходит тест независимо от значения, которое Foo.DoSomething ()устанавливает Foo.Bar с:
[Test]
public void DoSomething_SetsCorrectBar()
{
// Arrange
Foo foo = MockRepository.GenerateMock<Foo>(); // Creates mock in Replay mode (what I want for AAA syntax).
// Act
foo.DoSomething();
// Assert that DoSomething set Foo.Bar to an instance of CorrectBarSubclass
foo.AssertWasCalled(foo => foo.Bar = null, options => options.WhenCalled(invocation => Assert.That(invocation.Arguments[0] is CorrectBarSubclass)));
}
Документация Rhino 3.5 / AAA описывает, как устанавливать ожидания для наборов свойств, имеющих заданное значение, но я просто хочу проверить типзначение.
Как можно утверждать о наборе свойств, в частности, о наборе свойств, имеющем данный тип параметра?
Обновление: Приведенный выше пример упрощен,То, что я на самом деле тестирую, это отдельный государственный класс.Это одно из нескольких состояний, в котором может находиться «родительский объект» (объект, имеющий состояние, в данном случае Foo). Я проверял, что тестируемое состояние (называемое BarOne) правильно устанавливает Foo.State для экземпляра BarTwoкогда пришло время переходных состояний.
Более понятный пример (с реализованным принятым решением) будет:
[Test]
public void BarOne_DoSomething_SetsNextState()
{
// Arrange
Foo foo = MockRepository.GenerateMock<Foo>(); // Creates mock in Replay mode (what I want for AAA syntax).
foo.Stub(x => x.CreateBarTwoState()).Return(new BarTwo(foo));
BarOne bar = new BarOne(foo); // We are testing the BarOne state independently of Foo, that's why we mock Foo but instantiate BarOne.
// Act
bar.DoSomething();
// Assert that DoSomething set Foo.Bar to an instance of BarTwo
foo.AssertWasCalled(foo => foo.Bar = Arg<BarTwo>.Is.TypeOf);
}