どのようにMockカスケード呼び出しの方法(Redisを例に)
次の方法で1つの方法の呼び出しをMockし、必要な値を返すことができることを知っています.
しかし、次のようなカスケード呼び出しの方法に遭遇したらどうしますか?
この時我々はまずredisを出すことができます.opsForValue()で返されるオブジェクトは、次のとおりです.
その後、設定方法でこのオブジェクトをredisとすることができる.opsForValue()の戻りです.redisは複数の方法で使われているので、@Before注釈の方法に入れましたが、もちろん直接テスト方法に入れてもいいです.
次のことは簡単です.テスト方法でこのオブジェクトを直接操作してmockに必要な方法を操作することができます.以下のようにします.
JUnitを利用したテストの本質は、私たちのテストに必要なものを絶えず創造することであることを理解することです.
when(function(any())).thenReturn(null)
しかし、次のようなカスケード呼び出しの方法に遭遇したらどうしますか?
suffix = redis.opsForValue().increment(prefix, 1L);
この時我々はまずredisを出すことができます.opsForValue()で返されるオブジェクトは、次のとおりです.
@Mock
ValueOperations<String, String> valueOperations;
その後、設定方法でこのオブジェクトをredisとすることができる.opsForValue()の戻りです.redisは複数の方法で使われているので、@Before注釈の方法に入れましたが、もちろん直接テスト方法に入れてもいいです.
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
when(redis.opsForValue()).thenReturn(valueOperations);
}
次のことは簡単です.テスト方法でこのオブジェクトを直接操作してmockに必要な方法を操作することができます.以下のようにします.
when(valueOperations.increment(anyString(), anyLong())).thenReturn(10000L);
JUnitを利用したテストの本質は、私たちのテストに必要なものを絶えず創造することであることを理解することです.