偶然人们必要用回调检验重大聚会,这刻薄的它们是异步家具的。这些办法不轻易检验。,应用(手写本)
推迟直到到达它们家具是一种蹩脚的成真。,这让你的检验缺乏自信。。这么人们如何来对异步重大聚会停止检验呢?Mockito传送了人们!
防备人们有独身成真DummyCallback
电话话筒的DummyCaller
类,在DummyCaller
中有独身doSomethingAsynchronously()
重大聚会,行使此重大聚会DummyCollaborator
类的doSomethingAsynchronously(DummyCallback 回拨)
重大聚会,行使重大聚会io时将此回调参量为DummyCaller
靶子。当doSomethingAsynchronously(DummyCallback 回拨)
当分给在在幕后线索中取得时,将行使回调。或许率直的读取信号轻易吗 :
DummyCallback电话话筒 :
public interface DummyCallback {
public void onSuccess(List 成果)
public void onFail(int 信号)
}
DummyCaller类 :
public class DummyCaller implements DummyCallback {
// 家具异步用双手触摸、举起或握住的代劳类
private final DummyCollaborator dummyCollaborator;
// 家具成果
private List result = new ArrayList();
public DummyCaller(DummyCollaborator dummyCollaborator) {
this.dummyCollaborator = dummyCollaborator;
}
public void doSomethingAsynchronously() {
(这事)
}
public List getResult() {
return this.result;
}
@Override
public void onSuccess(List 成果) {
this.result = result;
(开 成)
}
@Override
public void onFail(int 信号) {
(开 错过)
}
}
真正的异步家具用双手触摸、举起或握住的DummyCollaborator类:
public class DummyCollaborator {
public static int ERROR_CODE = 1;
public DummyCollaborator() {
// empty
}
public void doSomethingAsynchronously (终极 DummyCallback 回拨) {
new 螺旋环(新 Runnable() {
@Override
public void run() {
try {
(5000);
();
} catch (InterruptedException e) {
(ERROR_CODE);
();
}
}
}).start();
}
}
人们有2种不一样的选择来检验人们的异步重大聚会,然而率先人们先成立独身DummyCollaboratorCallerTest检验类。
public class DummyCollaboratorCallerTest {
// 要检验的典型
private DummyCaller dummyCaller;
@Mock
private DummyCollaborator mockDummyCollaborator;
@Captor
private ArgumentCaptor dummyCallbackArgumentCaptor;
@Before
public void setUp() {
(这事)
dummyCaller = new DummyCaller(mockDummyCollaborator);
}
}
在设置重大聚会中,人们应用mockito anotations设定初值 Mock和ArgumentCaptor,人们还不必要喜欢他们。
人们必要小心的是,人们设定初值仿照靶子,那么,这些设定初值信号在SETU中。记着,有要检验的功用都要检验两倍。。
让人们看一眼上面的两个检验风景。
人们应用doAnswer()来为独身重大聚会停止强迫以检验异步重大聚会的检验用例。doanswer通常与whe兼备应用。,当合格证书缓和时,家具确切的的应对办法,免得answer办法引起非常,因而检验无经过。。
这刻薄的人们必要了解又来回调(同时性,当行使检验做成某事办法时,人们形状独身流通时间的anwser,将家具此回调。首要的,人们异步行使dosomething重大聚会,坚信礼了国家的和间隔成果。。
@Test
public void testDoSomethingAsynchronouslyUsingDoAnswer() {
final List results = (开e", "Two", 三)。
// 对callbac家具同时性anwser
doAnswer(new Answer() {
@Override
public Object answer(InvocationOnMock 行使) throws Throwable {
((DummyCallback)()[0]).onSuccess(results);
return null;
}
}).when(mockDummyCollaborator).doSomethingAsynchronously(
any());
// 行使TES下的重大聚会
();
// 坚信礼国家的和成果
verify(mockDummyCollaborator, times(1)).doSomethingAsynchronously(
any());
assertThat((), 值得的(成果)
}
其次个成真是应用argumentCapto。在这时人们的callback是异步的: 人们经过ArgumentCaptor赶上发射到DummyCollaborator靶子的DummyCallback回调。
终极,人们可以在检验功用安排停止有坚信礼,当人们想坚信礼国家的和间隔成果时可以行使onSuccess()
。
@Test
public void testDoSomethingAsynchronouslyUsingArgumentCaptor() {
// 行使要检验的重大聚会
();
final List results = (开e", "Two", 三)。
// Let''s call the 回拨。 ArgumentCaptor.capture() works like a 比赛匠。
verify(mockDummyCollaborator, times(1)).doSomethingAsynchronously(
());
// 家具回调前坚信礼成果
assertThat(().isEmpty(), 是(真)
// 行使回调onSuccess重大聚会
().onSuccess(results);
// 再次坚信礼成果
assertThat((), 值得的(成果)
}
Powered By wordpress.org