2011-06-24 13 views
3

このテスト方法はなぜ機能しませんか?私は取得するために戻り値または例外をスローする必要があります。あなたの最後の行は、あなたのスタブオブジェクトにAuthenticateメソッドを呼び出しているRhino Mocks Stubメソッドが動作しない

public AuthenticateResponse Authenticate(string username, string password) 
     { 
      string response = GetResponse(GetUrl(username, password).ToString()); 

      return ParseResponse(response); 
     } 


     [TestMethod()] 
     [ExpectedException(typeof(XmlException))] 
     public void Authenticate_BadXml_ReturnException() 
     { 
      MockRepository mockRepository = new MockRepository(); 
      SSO sso = mockRepository.Stub<SSO>(); 

      sso.Stub(t => t.GetResponse("")).Return("<test>d"); 

      AuthenticateResponse response = sso.Authenticate("test", "test"); 
     } 
+0

'GetResponse'メソッドは仮想ですか? –

+0

はいそれは仮想です –

答えて

3

あなたのリポジトリはまだ「記録」モードです。より新しいAAA(アレンジ/アクト/アサート)スタイルで、レコード/リプレイセマンティクス(過去のやり方)をミックスしています。代わりに、独自のリポジトリを作成する

は、単に使用:

var sso = MockRepository.GeneateStub<SSO>(); 

すべてが今、正常に動作する必要があります。

+0

これで、そのエラーは修正されましたが、現在はParseメソッドには当てられていませんが、GetResponseメソッドを嘲笑しています。私は上記の実際の方法を追加しました。 Parseメソッドをオーバーライドしていますか? –

+0

コードに「解析」メソッドが表示されません。 – PatrickSteele

+0

return ParseResponse(レスポンス); –

1

、あなたはそれを呼び出すときにスローに戻るか、値または例外を設定していないので、Rhinoのモックはスタブが何をすべきかを知りません。エラーが発生します。あなたはおそらくあなたのスタブ上のメソッドを呼びたくはありません - それは私には意味がないようですが、メソッドを呼び出すべきであるという別のオブジェクト(実際にこのテストでテストしています)がありますか?

+0

私はそれを間違って使用していると思います。 authenticateメソッドは外部サービスを呼び出し、データを戻します。私は dでそれを模倣し、それも認証されているParseメソッドに送信したいと思います。 –

0

それはあなたの全体のテストですか?もしそうなら、テストは意味をなさない。あなたのテストの唯一のオブジェクトは、あなたがスタブしているものです - テストの対象はどこですか?

SSOクラスをテストしようとしている場合は、は絶対にありません。モック/スタブしたいです。 SSOに1つ以上の依存関係がある場合は、Mockingフレームワークを使用して、それらの依存関係とSUTとの間に確立された対話を設定します。それが模擬的なフレームワークの正確な目的です。

+0

私は、認証メソッド自体の代わりに直接parseメソッドをテストする必要があると思います。私の依存関係は、私が削除しようとしているHTTPリクエストです。 –

関連する問題