2009-11-24 5 views
10

私はtestmethodに手紙を書くのに助けが必要です...なぜMoq-mockedメソッドはnullを返しましたか?

私は偽のGetProfileFromUserNameメソッドを使用しようとするとエラーが発生しますが、ユーザが自分のプロフィールを表示できることをテストする必要があります。このメソッドはnullを返します。私が理解していないのは、私がGetEmailという名前のメソッドと同じものを持っているということです。

これは仕事をdoesntのプロファイルを取得するためのコードです:

mockUserRepository.Setup(gp => gp.GetProfileFromUserName(userProfile.UserName)).Returns(new Profile { ProfileID = userProfile.ProfileID }); 

そして、これは作品の電子メールを、取得するためのコードです。

mockUserRepository.Setup(em => em.GetEmail(new MockIdentity("JohnDoe").Name)).Returns("[email protected]"); 

そして、これはモックの呼び出し方法のスニペットで、代わりにプロファイルのにnullを返します:

public ActionResult ShowProfile() 
    { 
     var profile = _userRepository.GetProfileFromUserName(User.Identity.Name); 

私は間違って何をしているのですか? GetProfileFromUserNameのuserProfile.UserNameをIt.IsAny()に置き換えた場合。

+0

'It.IsAny ()'を使うとどうなりますか? –

答えて

11

nullを返した場合は、Setupが実際の呼び出しと一致しなかったことを意味します。 userProfile.UserNameに、設定行に正しい値が含まれていることを確認します。

また、不一致の電話を検出するには、の電話番号をMockBehavior.Strictオプションで作成します。

これが役に立ちます。

mockUserRepository.Setup(gp => gp.GetProfileFromUserName(userProfile.UserName)) 
    .Returns(() => new Profile { ProfileID = userProfile.ProfileID }); 
:テスト・セットアップ(「配置」)の時点で存在しないオブジェクトを返すようにしようとしている誰のために
+0

暗黙的なキャスト演算子を使用していたので、コンパイルされたメソッドがmoqと呼び出しが一致しませんでした。 –

0

は、解決策は、デリゲート(機能<>)オーバーロードを使用することです
関連する問題