0

Rhinomocks 3.5 と新しいラムダ表記を使用して、いくつかのテストを模擬しようとしています。これを読みまし が、さらに多くの質問があります。特に MVC タイプのアーキテクチャの完全な例はありますか?

たとえば、これをモックする最良の方法は何ですか。

    public void OnAuthenticateUnitAccount()
    {
        if(AuthenticateUnitAccount != null)
        {
            int accountID = int.Parse(_view.GetAccountID());
            int securityCode = int.Parse(_view.GetSecurityCode());
            AuthenticateUnitAccount(accountID, securityCode);
        }
    }

ビュー インターフェイスとプレゼンター インターフェイスがあります。コントローラーでイベントを呼び出しています。

私が思いついたのはこれです。

[TestMethod()]
    public void OnAuthenticateUnitAccountTest()
    {
        IAuthenticationView view = MockRepository.GenerateStub<IAuthenticationView>();
        IAuthenticationPresenter target = MockRepository.GenerateMock<IAuthenticationPresenter>();

        target.Raise(x => x.AuthenticateUnitAccount += null, view.GetPlayerID(), view.GetSecurityCode());
        target.VerifyAllExpectations();
    }

合格ですが、それが正しいかどうかはわかりません。

はい、開発後にテストを行っています...迅速に行う必要がありました。

4

1 に答える 1

2

これがあなたのコントローラーの1つにあると仮定しています。さらに、コンストラクターまたはセッターを介してビュー データを渡す方法があり、AuthenticateUnitAccount ハンドラーを登録する方法があると想定しています。それを考えると、私は次のようなことをします:

[TestMethod]
public void OnAuthenticateUnitAccountSuccessTest()
{
    IAuthenticationView view = MockRepository.GenerateStub<IAuthenticationView>();
    view.Stub( v => GetPlayerID() ).Returns( 1 );
    view.Stub( v => GetSecurityCode() ).Returns( 2 );

    FakeAuthenticator authenticator = MockRepository.GenerateMock<FakeAuthenticator>();
    authenticator.Expect( a => a.Authenticate( 1, 2 ) );

    Controller controller = new Controller( view );
    controller.AuthenticateUnitAccount += authenticator.Authenticate;

    controller.OnAuthenicateAccount()

    authenticator.VerifyAllExpectations();
}

FakeAuthenticator クラスには、ハンドラーの署名と一致する Authenticate メソッドが含まれています。このメソッドが呼び出されたかどうかを知る必要があるため、適切な引数で呼び出されるようにスタブするのではなく、モックする必要があります。イベントを発生させるのではなく、メソッドを直接呼び出していることに気付くでしょう。 . ここではコードをテストするだけでよいため、イベントが発生したときに何が起こるかをテストする必要はありません。他の場所でそれをテストしたい場合があります。ここでは、適切なメソッドが適切な引数で呼び出されることを知りたいだけです。

失敗した場合は、次のようなことができます。

[TestMethod]
[ExpectedException(typeof(UnauthorizedException))]
public void OnAuthenticateUnitAccountFailureTest()
{
    IAuthenticationView view = MockRepository.GenerateStub<IAuthenticationView>();
    view.Stub( v => GetPlayerID() ).Returns( 1 );
    view.Stub( v => GetSecurityCode() ).Returns( 2 );

    FakeAuthenticator authenticator = MockRepository.GenerateMock<FakeAuthenticator>();
    authenticator.Expect( a => a.Authenticate( 1, 2 ) )
                 .Throw( new UnauthorizedException() );

    Controller controller = new Controller( view );
    controller.AuthenticateUnitAccount += authenticator.Authenticate;

    controller.OnAuthenicateAccount()

    authenticator.VerifyAllExpectations();
}
于 2008-12-16T20:35:24.297 に答える