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 と依存関係の間の 1 つの特定の相互作用にテストが集中します (私ならこのようにします):

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。インターフェイス名を右クリックし、[ Implement interface ] を選択します。Visual Studio は、NotImplementedException をスローするインターフェイスのサブメンバーを生成します。必要に応じて、スタブの実装を変更できます。

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

    // other members
}
于 2012-05-23T15:28:01.457 に答える