Я искал это, и это, кажется, ловушка для всех, к сожалению, все, что я прочитал, не помогает понять это. Вот этот класс:
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");
}