1

私はマシンの仕様を使ってテストをいじっていましたが、私にはできないことがあり、誰かが以前にそこにいたことがあるかどうか疑問に思っていました。

Rhino Mocksを使用して、ラムダ式を使用するメソッドのスタブを作成する方法はありますか?次のことができることがわかりました

サンプルクラスにこのメソッドを含める:

public void UpdateVisit(int userId){
    var user = repository.FindBy<User>(x=>x.Id==userId && user.IsActive ==true);
    user.Visit = user.Visit + 1;
    repository.Save(user);
}

私はこのようにメソッドをスタブすることができます:

//...Inside test method
var user = new User();
repository.Stub(x=>x.FindBy<User>(Arg<Expression<Func<User,bool>>>.Is.Anything)).Return(user);

問題は、特定のラムダ式のためだけに、Any Lambda式ではなくメソッドをスタブしたいので、この式がメソッドで変更された場合にテストが失敗するようにすることです... "x=>x.Id==userId && user.IsActive ==true"

データベースに移動しないモックリポジトリを作成して、ラムダでの動作をテストできると思いますが、これには別のアプローチがあるかどうか疑問に思っていました...

これに関する提案に感謝します、ありがとう

4

1 に答える 1

2

特定のラムダ式がメソッドで使用されていることをテストする必要はありません。メソッドが想定している動作をテストする必要があります。特定のラムダ式などの実装の詳細をテストすることは、一般的に脆弱すぎます。その代わり:

[Fact]
UpdateVisit_updates_Visit_for_user_that_is_in_the_repository_and_is_active() {
    // set up mock repository with dummy user having
    // userId == 1,
    // IsActive == true,
    // Visit = 42
    // invoke UpdateVisit
    // pull userId == 1 from the repository
    Assert.Equal(43, user.Visit);
}

[Fact]
UpdateVisit_does_not_update_visit_for_user_that_is_not_active() {
    // etc.
}
于 2010-11-28T15:03:37.370 に答える