我已经对此进行了搜索,这似乎是一个包罗万象的内容,不幸的是,我读过的所有内容都无济于事。这是课程:
public interface IMockInterface
{
MockClass MockedMethod();
MockClass MockThis();
}
public class MockClass : IMockInterface
{
public virtual MockClass MockedMethod()
{
MockClass returnValue;
returnValue = new MockClass();
returnValue.SomeMessage = "Not mocked";
return returnValue;
}
public MockClass MockThis()
{
MockClass mock;
MockClass returnValue;
mock = new MockClass();
return mock.MockedMethod();
}
}
和测试:
public void MockTest_Internal()
{
MockClass mainClass;
MockClass returnedClass;
IMockInterface mockProvider;
mainClass = new MockClass();
mockProvider = repository.StrictMock<IMockInterface>();
Expect.Call(mockProvider.MockedMethod())
.Return(new MockClass { SomeMessage = "Mocked" });
repository.ReplayAll();
returnedClass = mainClass.MockThis();
provider.AssertWasCalled(item => item.MockedMethod());
Assert.IsTrue(returnedClass.SomeMessage == "Mocked");
}
也试过了,还是不行
但我不断收到这个异常:
Rhino.Mocks.Exceptions.ExpectationViolationException:
IMockInterface.MockedMethod(); 预期 #1,实际 #0
现在,从我所读到的内容来看,这表明要么使用与预期参数不同的方法调用了该方法,要么从未调用过该方法,但预计会调用该方法。这不是测试的情况。
旁注:这是我第一次真正使用没有内部代码的 Rhino.Mocks,所以我基本上是边走边学。这里可能有一些非常愚蠢的东西......
这是评论过的旧测试,但不是我应该使用的:
public void MockTest_Internal()
{
MockClass mainClass;
MockClass returnedClass;
IMockInterface mockProvider;
mainClass = new MockClass();
var provider = MockRepository.GenerateStub<IMockInterface>();
provider.Stub(item => item.MockedMethod())
.Return(new MockClass { SomeMessage = "Mocked" });
returnedClass = mainClass.MockThis();
provider.AssertWasCalled(item => item.MockedMethod());
Assert.IsTrue(returnedClass.SomeMessage == "Mocked");
}