테스트 할 메소드가 외부 (가짜) 객체를 제대로 호출하는지 테스트하려고합니다. 나는이 테스트를 실행하면Rhino. 추상 클래스 메소드 호출을 테스트하는 방법을 모의합니다.
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 라인에 발생합니다 여기
는 샘플 코드입니다.어떻게 접근합니까? 즉, 테스트중인 메소드가 통화를 올바르게 전달하는지 확인하는 방법은 무엇입니까?
이 닷넷 2.0 프로젝트 (I 할 수있는 지금은 변화 없음이), 그래서 "X =>"구문 :(내가 인정해야
이상한 ... 나는 자신의 접근 방식을 시도했지만, 대신 자신의 MockRepository를 사용하는 대신 정적 GenerateStrictMock <>을 사용했고, 나중에 mock.GetMockRepository()를 사용하여 구문을 사용했다. "Rhino.Mocks.Exceptions.ExpectationViolationException : BaseWorker.DoWork ("SomeData "); 예상 # 0, 실제 # 1"로 실패합니다. " 당신의 접근 방식은 작동합니다 ...하지만 나는 더 혼란 스럽습니다 ... 어쨌든 ... 작동합니다, 고마워요. –