我能否执行在使用Rhino Mocks进行mock的抽象类上存在的虚方法的主体?
明确一点,我不是在尝试mock虚方法的行为。我在试图测试(被mock的类上的)虚方法。
这个想法是否是对Rhino Mocks的明显误用?
我能否执行在使用Rhino Mocks进行mock的抽象类上存在的虚方法的主体?
明确一点,我不是在尝试mock虚方法的行为。我在试图测试(被mock的类上的)虚方法。
这个想法是否是对Rhino Mocks的明显误用?
没问题,完全可以这样做。虽然我没有尝试过,但如果失败了,我会非常惊讶。
编辑:我猜你想要使用PartialMock
方法。这里是一个例子:
using System;
using Rhino.Mocks;
public abstract class Abstract
{
public virtual int Foo()
{
return Bar() * 2;
}
public abstract int Bar();
}
class Test
{
static void Main(string[] args)
{
MockRepository repository = new MockRepository();
Abstract mock = repository.PartialMock<Abstract>();
using (repository.Record())
{
Expect.Call(mock.Bar()).Return(5);
}
Console.WriteLine(mock.Foo()); // Prints 10
}
}
编辑:或者在我第一次尝试AAA时:
using System;
using Rhino.Mocks;
public abstract class Abstract
{
public virtual int Foo()
{
return Bar() * 2;
}
public abstract int Bar();
}
class Test
{
static void Main(string[] args)
{
// Arrange
Abstract mock = MockRepository.GeneratePartialMock<Abstract>();
mock.Stub(action => action.Bar()).Return(5);
// Act
int result = mock.Foo();
// Assert
mock.AssertWasCalled(x => x.Bar());
// And assert that result is 10...
}
}
var mock = MockRepository.GenerateMock<YourClass>();
mock.Setup(m => m.Foo()).CallOriginalMethod(OriginalCallOptions.NoExpectation);