8

Action1 つは成功、もう 1 つは失敗の2 つの s を必要とするメソッドを持つサービスがあります。それぞれActionが追加情報を含む Result パラメータを取ります...

void AuthoriseUser(AuthDetails loginDetails, 
  Action<AuthResult> onSuccess, 
  Action<AuthResult> onFailure);

そのサービスに依存するクラスの単体テストを作成しており、このクラスがonSuccess(...)およびonFailure(...)コールバックで正しいことを行うことをテストしたいと考えています。これらはプライベート メソッドまたは匿名メソッドのいずれかです。モックされたサービスをセットアップして、いずれかのアクションを呼び出すにはどうすればよいでしょうか?

4

1 に答える 1

17

Callbackメソッド ( Moq クイックスタートコールバック セクションも参照) を使用して、モックされたメソッド呼び出し ( ) の元の引数で呼び出されるコールバックを構成して、そこでおよびコールバックAuthoriseUserを呼び出すことができます。onSuccessonFailure

var moq = new Mock<IMyService>();
moq.Setup(m => m.AuthoriseUser(It.IsAny<AuthDetails>(),
                                It.IsAny<Action<AuthResult>>(),
                                It.IsAny<Action<AuthResult>>()))
    .Callback<AuthDetails, Action<AuthResult>, Action<AuthResult>>(
    (loginDetails, onSuccess, onFailure) =>
        {
            onSuccess(new AuthResult()); // fire onSuccess
            onFailure(new AuthResult()); // fire onFailure
        });
于 2013-06-18T21:32:23.023 に答える