2012-02-08 7 views
2

私がやっている私のコントローラのアクションで:私はいくつかの文字列を返すようにUrl.Actionへの呼び出しをスタブ可能性がどのようにNUnitのと部品番号(およびMVC 2)を使用していインターフェイスを持たないメソッドをモックする方法はありますか?

string a = Url.Action(...); 

+0

あなたはUrlの定義を投稿して、より完全なサンプルを投稿できますか?Url.Actionが何であるか知る必要があります。 –

+0

私はできるとは思いません。何とかそのUrlクラスにフックできなくてはなりません。 – Arafangion

答えて

2

デフォルトのコンストラクタがMoqではない具体的なクラスをモックできません(私は、UrlがUrlHelperのインスタンスであると仮定しています)。

(1)Moles

代替/補完的モックフレームワークとしてチェックアウト(2)インタフェースを実装し、その後、クライアントのためのラッパーを模擬することができますUrlHelperメソッドのラッパークラスを書く:あなたはここに2つのオプションがあります。

+0

私はMolesが存在することに驚きましたが、確実に100%の信頼性を持つ静的メソッドを迂回することはできません。コンパイラは静的メソッドをインライン化することはできませんか? – Arafangion

+0

私はMolesがどのように動作するのか完全には分かっていませんが、私はそれを頻繁に使用し、静的メソッドや他の "unmockable"依存関係を "moling"する問題はありませんでした。 –

+0

Controller.UrlもUrlHeler.Actionも静的ではありません。どちらもクラスのインスタンスメンバーです。しかし、UrlHeler.Actionは仮想ではないので、これはいずれも役に立ちません。 –

0

できません。 UrlHeler.Actionは仮想ではないので、Moqでスタブすることはできません。

ただし、コントローラに仮想メソッドを作成することはできます。テストでの実装を置き換える/オーバーライドします。

関連する問題