2012-04-27 7 views
0

最初に、私はJava開発者ではなく、私は現在C#で開発していますので、私がJavaに関して行った前提や記述は間違っているかもしれません。Javaに最適なのはどちらですか?インターフェースを嘲笑したり、クラスを嘲笑したりしますか?

mockedオブジェクトで.Netのユニットテストを書くとき、私たちがインターフェースを模擬する時間の99%。クラスをモックすることは可能ですが、仮想(つまりモック可能な)メソッドを制御できるだけです。

Javaの場合、メソッドはデフォルトでは仮想的なので、クラスを模倣することはインターフェイスを模擬することとまったく同じになると思います。すべてが模擬動作でオーバーライドされるためです。

したがって、Javaのインタフェース(したがってユニットテストではインタフェースを模擬する)に依存すること、またはほとんどのJava開発者がクラスを使用してタイプの数を減らす(インタフェースを必要としない)ことはベストプラクティスですか?

+0

これはおそらくprogrammers.stackexchange.comに適していますが、そこにも建設的ではないかもしれません。 –

答えて

1

私もJavaでモックインタフェースを思います。私はこれがすべての考えであると考えています。クライアントはインタフェース参照型についてしか知りません。あなたはそれの後ろに模擬実装で注入することができ、クライアントは誰も賢明ではありません。

1

私は実際に逆の移行を行いました。つまり、Javaで嘲笑してからcsharpに移行しました。伝統的に私が働いていた会社は、コンクリートに本当に1つがあれば、インターフェースを嘲笑しました。それ以外の場合は、でした。あなたが指定した理由で実際のクラスを模擬しました。だから私の経験から明らかな依存関係の理由から、私たちはインターフェースを優先しました。

Javaでは、Mockitoモックフレームワークを選択しました。私はそれが美しく機能していると思います。

http://code.google.com/p/mockito/

1

私が推薦するもう一つの良いフレームワークはEasyMockです。

http://easymock.org/

は、低学習曲線を持っており、私はそれを使用したとき、私は問題ありませんでした。

+0

あなたのお返事ありがとうございますが、それは実際に質問に答えるものではありません。私はフレームワークを探していません、私は最初の文で述べたようにJava開発者ではありません:) – RichK

0

試してみましょうhttp://code.google.com/p/mockito/。非常にシンプルで強力です!

+0

あなたの応答をありがとうが、実際には質問に答えることはありません。私はフレームワークを探していません、私は最初の文に記載されているようにJava開発者ではありません:) – RichK

+0

申し訳ありません。あなたの質問への正確な答えは次のようになります。私はできるだけインターフェイスを個人的に模擬します。実装の詳細を公開する必要がある場合は、クラスを非難すると便利です。それにもかかわらず、そのようなケースは異なるテストスイートでカバーする必要があります。だからインタフェースを嘲笑することが行く方法です。 – kofemann

関連する問題