テスト自動化プロジェクトを作成していて、それをTESTNGで使用したいと思っています。自動化プロジェクトにMVCアーキテクチャを含めることを計画しており、コントローラーシングルトンを作成することを考えていました。したがって、マルチスレッドをサポートするTESTNGによってアクセス/使用されるため、その長所と短所を知りたいと思いました。
質問する
109 次
2 に答える
1
テスト自動化では、または一般的にシングルトンを避ける必要があります。特にJavaでは、通常、新しいテストケースのシングルトンをリセットすることはできません。それは、新しいtetsケースが前のものからの結果を持っているsingeltonを使用するというsiatuationにつながります。これは悪いです!
テストケースでのみ使用されるresetSingleton()またはsetInstance()メソッドを持つ特別なシングルトンを作成する場合があります。
さらに、反射を介してシングルトンをドレセットします。私は3つのテクニックをすべて実行しましたが、次のようになります。
最善は、シングルトンをまったく避けることです。
于 2012-12-18T19:34:43.697 に答える
1
test ngについて具体的にコメントすることはできませんが、テスト可能なコードの記述に関するこの興味深いドキュメントをお勧めします。特に、シングルトンに関するセクションがあります。ここにいくつかの抜粋があります:
- グローバル状態を使用するすべてのテストでは、期待される状態で開始する必要があります。そうしないと、テストは失敗します。ただし、前のテストで別のオブジェクトがそのグローバル状態を変更した可能性があります。
- グローバル状態では、テストを並行して実行できないことがよくあります。これにより、テストスイートの実行速度が低下します。
- 独自の「シングルトンネス」を適用するシングルトンは不正行為に終わります。テスト中にインスタンスを変更する必要があるため、いわゆるシングルトンでreset()やsetForTest()などのミューテイターメソッドがよく見られます。テスト後にシングルトンをリセットするのを忘れた場合、後で使用すると古いインスタンスが使用され、デバッグが困難な方法で失敗する可能性があります。
結論:可能であればシングルトンの使用を避け、代わりに依存性注入を使用してください。言い換えれば、代わりに:
public void someMethod() {
Controller c = Controller.getInstance();
c.doSomething();
}
賛成:
public void someMethod(Controller c) {
c.doSomething();
}
于 2012-12-19T09:26:12.883 に答える