您不需要手动编写自己的代理,因为大多数模拟框架都支持您的方案。
这是一个使用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 = truewhich 将:
  如果没有期望覆盖成员(在 Rhino Mocks 中也称为“Partial Mocks”),则调用基类实现:默认为 false。