2016-04-02 18 views
0

私は、ソースからデータを読み込んで処理を行い、その情報をデータベースとファイルに書き出します。モックを作成せずに特定のパラメータでメソッド呼び出しをチェックすることは可能ですか?私はそれがMockitoを介して行うことができることを知っていますが、実際のオブジェクトではなくモックオブジェクトでのみ動作します。このような状況では、異なるライブラリのたくさんのクラスが内部的に使用されているので、私はすべてのクラスの模擬を作成することはできません。モックを使わないでメソッドを呼び出す

それは内部

obj.insert(Class1 param1,Class2 param2); 

が起こっている私は、この

verify(obj,times(12)).insert(any(),any()); 

のようにそれを確認したいが、objが本物ではない、この方法を確認するためにモックオブジェクトでなければなりません。

答えて

1

実際のオブジェクトでテストする前に考慮すべき点はほとんどありません。

  1. 実際のオブジェクトでテストすると、単体テストではなくなり、統合テストとなり、データベースなどの実際の外部サービスでテストします。
  2. これにより、外部サービスの可用性の状況に応じてテストが合格または不合格になります。また、通常の単体テストよりも時間がかかります。

特定のパラメータでメソッドの呼び出しを確認することはできません。

AFAIK、私は考えられません。

さまざまなライブラリのロットクラスが内部的に使用されているため、使用するすべてのクラスのモックを作成することはできません。

クラスが内部で多くのライブラリを使用している可能性がありますが、機能を個々のクラスに設計してカプセル化し、テスト対象のクラスが個々のクラスを使用している場合は、個々のクラスであり、使用しているライブラリについて心配する必要はありません。この場合

システムのような、ソースからデータを読み取り、いくつかの処理を行い、データベース、ファイルにその情報を書き込みます。

私はこの機能をユニットテストしたいと思っています。また、それらを個々のインターフェイスにカプセル化したと仮定すると、SourceReader(データの読み取りと処理)とSinkWriter(dbとファイルへの書き込み)が仮定されています。私はこれらの2つのインターフェースと単体テストだけを試して、テスト対象のクラスがこれらのモックオブジェクトに適切な引数を持つ必要なメソッドを呼び出すかどうかをテストします。

私の見解では、システムが私たちにオブジェクトを模倣することを許可していないとすれば、私は疑いがあり、リファクタリングをコードと考えます。単体テストの目的の1つは、より優れた設計(特に行動ベースの単体テスト)を促進することであり、単体テストができない場合は、コードが複雑になり、リファクタリングが必要になることを意味します。

+0

オブジェクトの中にモックオブジェクトを挿入することはどういうわけかできますか?私はクラスの特定のメソッドの呼び出しをテストすることを望み、そのオブジェクトは別のクラスのサイドに作成されます。
クラスC2 { C1 C1 =新しいC1(); c1.someMethod(someParams); }
c2の中にc1のモックを挿入することは可能ですか?私はc1のメソッドの呼び出しを確認することができます。 – xrs

+0

@xrsクラスの特定のメソッドの呼び出し、例えばXYZは、クラス(XYZ)がモックである限り、(ただ)テストすることができます。 –

+0

XYZのモックをクラスABCに挿入することは可能ですか?クラスABCのオブジェクトは、XYZの注入モックで自動的に作成されます。 ABCのオブジェクト内でXYZのメソッドを呼び出すことができますか? – xrs

関連する問題