2017-08-18 1 views
0

私は、Mockitoフレームワークを使ってテストしたい異なるオブジェクト間の複雑な相互作用を持つメソッドを持っています。私はいくつかのガイドラインに感謝します。私はコードがあまり意味しないことを知っています。Mockitoを使用してこのメ​​ソッドをテストするにはどうすればよいですか?

getInstance()の両方のメソッドは静的です。私はobj3を模倣し、テストでtrueを返すようにifステートメントを作成したいと思います。

​​
+0

おそらく、そのメソッドを含むクラスは、両方のファクトリを属性として持つことができ、 'getList()'と 'isFlagSet(...)'をモックするためにいくつかのモックを注入するために使用できるコンストラクタから取得できます。 – litelite

+0

「コードはあまり意味がありません」と他の人たちと比較して、それほど悪くはありません。 – davidxxx

+0

なぜ最初に 'obj3'をモックするのですか?テストで 'getRequest'を' obj1'と 'obj2'に適切な値で呼び出して、返された値を確認することはできませんか?このサイトの質問には、[XY問題](http://xyproblem.info)があります。 –

答えて

0

実際に、この方法は、obj3変数がテスト可能な直線ではない値に呼び出されます。

根本的な原因は、静的メソッドであるgetInstance()です。実際に

FactoryOne.getInstance()はテスト中のクラスの依存すべきであり、返されるオブジェクトはこのようにインターフェース

する必要があり、あなたが依存関係を設定し、コンストラクタを定義することができます。

public MyClass(FooInterface foo){ 
    this.foo = foo; 
} 

と置換:

ObjectThree obj3 = FactoryOne.getInstance().getList().getObject(obj2.getId()); 

によって:

アプリケーションコードで
ObjectThree obj3 = foo.getList().getObject(obj2.getId()); 

、あなたは、コンストラクタを呼び出すことができます:

MyClass c = new MyClass(FactoryOne.getInstance().getList()); 

そして、テストコードでは、あなたが経由でテスト中のクラスに設定し、Fooインターフェースのモックを作成することができますコンストラクタ:次に

Foo fooMock = Mockito.mock(Foo.class); 
MyClass myClassUnderTest = new MyClass(fooMock); 

試験におけるgetObject()への呼び出しのための所望の値と別のモックオブジェクトを返すgetList()用模擬挙動を記録します。

+0

この場合、obj3をモックすることは意味があることをどうやって知っていますか?そしてそれが嘲笑される必要があったとしても、それは完全にうまくいくことができます。だからどちらの方法でも、 'getRequest'コードは「テスト不可」と言うことは正当ではありません。このような答えは有益ではありません... –

+0

そして、どの点で、それは意味をなさないと断言できますか? opはどのように依存関係を模倣しているか知りたい。私は彼に説明する。あなたは少なくとも正確に私を引用することができます: "ストレートテスト可能ではない"とは "テストできない"という意味ではありません。 – davidxxx

+0

OPは実際の問題が何であるかを決して説明しないので(「XY質問」)、「FactoryOne」を嘲笑すべき理由がないと仮定します。そしてコード*は「ストレート・テスト可能」です(必要ならば、2つの異なるモッキング・ライブラリを使ってテストを書くことができます)。しかし、実際には、ここで嘲笑することのほとんどは悪い考えです。私は何年もの経験から多くのテストをして、何度も誤用/虐待されているのを見たことがあります... –

関連する問題