1

Rhino Mocks 是否可以创建一个存根,为所有调用抛出异常?

public interface IMyIF
{
    // Some methods
}

[TestClass]
public class MyTestClass
{
    [TestMethod()]
    public void MyTest()
    {
        MockRepository mocks = new MockRepository();
        IMyIF stb = mocks.Stub<IMyIF>();

        // Somehow set stb to throw some exception on every method call
        // without knowing all the methods and overloads in IMyIF interface

        // use stb to test something
    }
}
4

2 回答 2

4
var stb = MockRepository.GenerateStrictMock<IMyIF>();
于 2012-05-23T11:49:37.697 回答
1

很奇怪的要求。你想测试什么?如果您正在测试该Bar接口的方法在IFoo您的测试类调用时抛出一些异常,那么只需在方法 Bar 上设置此期望。不要一次测试所有方法。

这将使您的测试集中在 sut 和依赖项之间的一种特定交互上(我会这样做):

var mock = MockRepository.GenerateMock<IMyIF>();
mock.Expect(m => m.Foo()).Throw(new MyCustomException());
sut.Exercise(mock);

这将抛出 ExpectationViolationException:

var mock = MockRepository.GenerateStrictMock<IMyIF>();
sut.Exercise(mock);

这将抛出 NullreferenceException:

sut.Exercise(null);

您也可以创建MyIFStub继承自IMyIF. 右键单击接口名称并选择实现接口。Visual Studio 将生成接口的子成员,这将引发 NotImplementedException。如果需要,您可以更改存根实现:

public class MyIFStub : IMyIF
{    
    public void Foo()
    {
       throw new NotImplementedException();
    }

    // other members
}
于 2012-05-23T15:28:01.457 回答