Я пытаюсь проверить, правильно ли метод, который я хочу проверить, вызывает какой-то внешний (mock) объект.Rhino.Mocks, как тестировать вызовы метода абстрактного класса
Вот пример кода:
using System;
using Rhino.Mocks;
using NUnit.Framework;
namespace RhinoTests
{
public abstract class BaseWorker
{
public abstract int DoWork(string data);
}
public class MyClass
{
private BaseWorker worker;
public BaseWorker Worker
{
get { return this.worker; }
}
public MyClass(BaseWorker worker)
{
this.worker = worker;
}
public int MethodToTest(string data)
{
return this.Worker.DoWork(data);
}
}
[TestFixture]
public class RhinoTest
{
[Test]
public void TestMyMethod()
{
BaseWorker mock = MockRepository.GenerateMock<BaseWorker>();
MyClass myClass = new MyClass(mock);
string testData = "SomeData";
int expResponse = 10;
//I want to verify, that the method forwards the input to the worker
//and returns the result of the call
Expect.Call(mock.DoWork(testData)).Return(expResponse);
mock.GetMockRepository().ReplayAll();
int realResp = myClass.MethodToTest(testData);
Assert.AreEqual(expResponse, realResp);
}
}
}
Когда я запускаю этот тест, я получаю:
TestCase 'RhinoTests.RhinoTest.TestMyMethod'
failed: System.InvalidOperationException : Invalid call, the last call has been used or no call has been made (make sure that you are calling a virtual (C#)/Overridable (VB) method).
at Rhino.Mocks.LastCall.GetOptions[T]()
at Rhino.Mocks.Expect.Call[T](T ignored)
RhinoTest.cs(48,0): at RhinoTests.RhinoTest.TestMyMethod()
Исключение брошено на Expect.Call линии, прежде чем любой вызов сделан.
Как подойти к этому - например, как проверить, правильно ли проверенный метод переадресовывает вызов? не
Это проект .NET 2.0 (я могу не изменить это сейчас), так что не «х =>» синтаксис :(
Странно ... Я попробовал почти ваш подход, просто вместо того, чтобы использовать собственный MockRepository, я использовал статический GenerateStrictMock <>, а затем в операциях using, которые я использовал mock.GetMockRepository(). Record/Replay и он терпит неудачу с «Rhino.Mocks.Exceptions.ExpectationViolationException: BaseWorker.DoWork (« SomeData »),« Ожидаемый № 0 »,« Фактический номер 1 ».». Ваш подход работает ... но меня еще больше смущает ... в любом случае ... это работает, спасибо. –