2016-11-03 9 views
0

でパラメータを取りmockitoオブジェクトを作成します。ここではは、私はクラスCLSのMockitoモックオブジェクトを作成したいのjava

public class cls{ 
private var; 

cls(String x){ 
var = x; 
} 

} 

は私のコードです:

cls obj = mock(cls.class) 

objがsucessfully作成されますが、varがありますパラメータがコンストラクタに渡されなかったためnullです。さらに、powermockitoは使用できません。 モックオブジェクトの作成時にclsのコンストラクタにパラメータを渡すにはどうすればよいですか?

+0

実際にMockオブジェクトを使用する必要がありますか?可能であれば実際のオブジェクトを常に使用し、データベースや外部リソースにアクセスするモッククラスなど、実際のオブジェクトを使用できない場合はモックを使用します。 – MikeJ

+0

この例では、テストデータを使用してオブジェクトを作成できます。モックは、値ではなく、動作をシミュレートするためのものです。 –

答えて

0

変数を設定する必要はありません。

あなたが必要とするのは、あなたがコントロールする行動を開始したときにあなたのモックのクライアントが期待値に戻ることです。呼び出されるメソッドと戻り値に注意してください。

Javaコーディング規約を習得して従うことをお勧めします。あなたのコードは読まなくても読みにくいです。

+0

私は呼び出す必要があるメソッドがありません。私はvarに設定された値を持つobjが必要です。 varはprivateなので、コンストラクタが実行できる唯一の方法です。どのようにそれが行われているかを示すことができるいくつかのコードを書くことができますか? –

+0

モックのクライアントはこのオブジェクトで何をしますか?なぜ新しく電話してそれをやってみませんか?私はそのような場合にモックの理由を見ません。 – duffymo

1

varはプライベートです。実装の詳細です。 Mockitoの全体的なポイントは、既存の実装のあらゆる側面を避け、が完全に偽の実装を持っているにも関わらず、テスト対象クラスと現実的にやり取りするオブジェクトに置き換えることです。

MockitoはObjenesisまたはByteBuddyを使用して、コンストラクタを呼び出さずにオブジェクトを作成します。したがってモックを作成することは、いずれの場合でも現実的なコンストラクタを持つことにはなりません。代わりに、varを消費するメソッドをスタブすることをお勧めします。あなたが選択的にこれらのメソッドの一部をスタブか検証したいが、現実的なフィールドを持っている場合、あなたは常にスパイ作成することができる一方

、:あなたは本当のコンストラクタを呼び出しているので

cls obj = spy(new cls(100)); 

を、クラスのフィールドは現実的に設定され、objという新しいオブジェクトにコピーされます。

関連する問題