您不需要手动编写自己的代理,因为大多数模拟框架都支持您的方案。
这是一个使用Moq的示例(Moq 将在内部为您创建一个动态代理):
public class SomeException : Exception { }
public class Foo
{
public virtual int Execute()
{
try
{
GetFiles();
}
catch (SomeException)
{
return 1;
}
return 0;
}
public virtual void GetFiles()
{
//...
}
}
[Test]
public void FooTest()
{
var fooUnderTest = new Mock<Foo>();
fooUnderTest.CallBase = true;
fooUnderTest.Setup(f => f.GetFiles()).Throws(new SomeException());
var result = fooUnderTest.Object.Execute();
Assert.AreEqual(1, result);
}
您只需要注意设置Callbase = true
which 将:
如果没有期望覆盖成员(在 Rhino Mocks 中也称为“Partial Mocks”),则调用基类实现:默认为 false。