2016-05-17 4 views
0

サービスクラス(サービスレイヤ(インタフェース)に実装されているメソッド)をテストクラスでのみ使用する方法はありますか?私のサービス・インターフェースでテスト専用のJavaサービスメソッド

私は唯一のテストクラス でそれを使用して防ぐか、そのようなコントローラ

としてその managerImplまたは他の宮殿でそれを使用していない他の開発者にいくつかの警告を表示する方法を持っています
+0

私は私のテストケースで私は(テストのためだけに)すべてのユーザーを削除する必要があり、私はサービスレイヤにこのメソッドを入れたくないので、私はどうすればいいですか? – Moolerian

+0

@Deprecatedなどを使用できますか? 他の開発者に「生産モードでは使用しないでください」と警告する方法が必要です – Moolerian

答えて

2

言葉遣いに関する正確なことができます:

あなたが本当にJavaのインターフェースの方法について話している場合は、 Java8では、例外をスローする可能性があるデフォルトの実装を提供することができます。このインタフェースを実装する非常に特殊なクラスがあり、テスト目的のためにその1つのメソッドをオーバーライドすることができます。

一般的に「インターフェース」について話している場合は、 "あるクラスのメソッドのリスト"のように...このような "ベーススロー"と "子オーバーライド"も同様に機能する可能性があります。

もちろん、最初の回答は表示される可能性があります。我々がでない場合、は実際のインターフェイスについて話しています。少なくともメソッドパッケージを保護することができます。使用法は同じパッケージに制限されています。

もう1つの選択肢は、ISPを分離することです。インターフェイス。 「テスト」のためだけに使用すべきものがある場合。それらを「TestSupportInterface」に入れることを検討してください。または同様のもの。

もう一度;これらのアイデアのほとんどは「慣習により」働いています。ユーザーが消化しなければならない何らかの情報を提供することによって...しかしそれは強制できません。

最後に、実動コードを変更することを検討することができます。非常に多くの場合、そのような「特別なテストゲッター」は必要ありません。言い換えれば、テストが「Xの状態をフェッチする」のように動作している場合、Xで何かを行い、再びXの状態をフェッチして比較します。場合によってはの動作ベースのテストに変更することができます(Xに何が起きているかはチェックしませんが、XがY、Z、...にどのような影響を及ぼすかチェックします)。

0

いいえ、Javaにはメソッドの使用について開発者に警告する概念はありません。

このような方法が本当に必要な場合、またはそのようなバックドアを必要としないようにデザインを変更できるかどうかを再確認してください。 (例えば、依存性注入の力を利用する)。私の経験から、これはいつでも可能です。

このメソッドでは、実動コードではなく、テストコード(サブクラス化など)で実装することを依然として納得している場合は、

+0

テストケースで私のビジネスサービスメソッドのテストクラスを作成しています。テスト用にすべてのユーザーを削除する必要があります。私はこのメソッドをサービスレイヤに入れたくないので、どうしたらいいですか? – Moolerian

0

「テスト専用」のプロダクトコードには何も置かない方が一般的です。

すべてのユーザーに専用のサービスを作成し、テストクラスパスに配置することができます。 実装に応じて、このサービスは本番ユーザーサービスのサブクラスである場合があります。

0

その他の良い答えに加えて、実際にテストケースで呼び出されるメソッドが必要ですが、実動コードでは呼び出されないメソッドが必要な場合は、このメソッドをprivateにできます。したがって誰かが可視性を変更しない限り、誰もこのメソッドを使用しません。あなたのテストケースでは、PrivateAccessorで呼び出すことができます。

注意:これはコードの匂いと考えられています。 IDEの場合、これはプライベートで未使用のメソッドなので、警告メッセージが表示されます。そして、誰かがこの方法を取り除く可能性があります。

関連する問題