Mockito junitテストの問題に直面しています。私はそれが初めてであり、私が直面している問題に少し混乱しています。これに関する助けをいただければ幸いです。
_class Activity{
public void firstMethod(){
String str = secondMethod();
}
public String secondMethod(){
String str = null;
/* some Code */
return str;
}
}
_
例外を取得する:
_*org.mockito.exceptions.misusing.NotAMockException:
Argument passed to when() is not a mock!*
_
以下のコードで
_class ActivityTest(){
Activity act;
@Before
public void setup(){
act = new Activity();
}
@Test
public void testFirstMethod(){
Mockito.doReturn(Mockito.anyString()).when(act).secondMethod();
act.firstMethod();
verify(act).secondMethod();
}
}
_
アクティビティはモックではないことは承知していますが、secondMethod()
は同じクラスのメソッドであるため、これを回避する方法はわかりません。既にユニットテストを行っているので、secondMethod()
のルールを記述する必要があります。 secondMethod()
の定義には外部依存関係があります。 secondMethod()
に存在する外部依存関係をモックし、secondMethod()
のルールではなく、それらのルールを記述する必要がありますか?
この投稿を見つけました: Mockito Spy'ing on object on unit testing ただし、secondMethod()を別のクラスに分けることは意味がありません。私のメソッドはこのクラスに関連しています。テスト用に別のクラスを作成するのは適切ではないようです。すでに投稿で説明したように、spy()を使用して実際のクラスをモックすることは、最も正しい方法ではありません。
私がテストしているクラスはActivityクラスのモックを作成するべきではないと思います。私はこれに助けと洞察を本当に感謝します。
既に述べたように、act
はモックではないため、動作を記録することはできません。 Mockito.spy
を使用して、act
オブジェクトをスパイ(または部分的にモック)し、secondMethod
の動作のみを記録し、 firstMethod
の実際のコード。
ただし、オブジェクトをdoReturn
ingまたはmock
ingする方法に関係なく、spy
呼び出しではマッチャーを使用できないことに注意してください。戻り値は具象オブジェクトでなければなりません。
class ActivityTest() {
Activity act;
@Before
public void setup(){
act = Mockito.spy(new Activity()); // Here!
}
@Test
public void testFirstMethod(){
Mockito.doReturn("someString").when(act).secondMethod();
act.firstMethod();
verify(act).secondMethod();
}
}
少し洗練された構文を使用すると、Mockito.spy
を明示的に呼び出す代わりに注釈を使用できますが、実際には好みの問題です。
@RunWith(MockitoJUnitRunner.class)
class ActivityTest() {
@Spy
Activity act = new Activity();
@Test
public void testFirstMethod(){
Mockito.doReturn("someString").when(act).secondMethod();
act.firstMethod();
verify(act).secondMethod();
}
}
ヒントを次に示します。
それが役に立てば幸い。