[英]Mockito: Verify generic list as argument
我被困試圖驗證一個偵聽器實現的參數。
來自Listener
接口的方法:
public void settingsAdded(List<EditJobSettings> addedSettings);
我要檢查的是列表中是否存在預期的對象。
測試(忽略無關代碼):
@Test
public void initiallyAddColorAndAlignTile() {
mSettings.add(mColorSetting);
// This method calls the listener method and passes the added settings as argument
mStatusNotifier.notifySettingsUpdates(mSettings);
// Here I get stuck: this does not compile, but I can't find how to work around this. Is there a way to specify a generic list as argument?
ArgumentCaptor<List<EditJobSettingsSet>> argument = (List<EditJobSettingsSet>) ArgumentCaptor.forClass(List.class);
verify(mEditJobListener).settingsAdded(argument.capture());
assertTrue(argument.getValue().contains(mColorSettings));
}
提前致謝。
您的轉換失敗,因為您正在將ArgumentCaptor<stuff>
轉換為List<stuff>
。
如果您已經在調用MockitoAnnotations.initMocks(this)
,則可以將字段聲明為@Captor
,這是減少重復的最簡單方法:
public class YourTest {
@Mock SomeClass someMock;
@Captor ArgumentCaptor<List<EditJobSettingsSet>> argument;
@Before public void initializeMocks() {
// This gets called automatically if you @RunWith(MockitoJUnitRunner.class).
MockitoAnnotations.initMocks(this);
}
@Test public void yourTest() {
// [insert setup here]
verify(mEditJobListener).settingsAdded(argument.capture());
// [insert assertions here]
}
}
否則,您將不得不投射一些近似值 (我將在可能時進行測試):
// Might not work without the cast to (ArgumentCaptor) and some @SuppressWarnings.
ArgumentCaptor<List<EditJobSettingsSet>> argument =
(ArgumentCaptor<List<EditJobSettingsSet>>)
((ArgumentCaptor) ArgumentCaptor.forClass(List.class));
ArgumentCaptor<List<EditJobSettingsSet>> argument =
(List<EditJobSettingsSet>) ArgumentCaptor.forClass(List.class);
您正在嘗試使用List<EditJobSettingsSet>
初始化ArgumentCaptor<List<EditJobSettingsSet>>
類型的ArgumentCaptor<List<EditJobSettingsSet>>
,並將ArgumentCaptor.forClass(List.class)
(ArgumentCaptor類型)的結果轉換為列表。 那沒有道理。 你想要的是
ArgumentCaptor<List> argument = ArgumentCaptor.forClass(List.class);
verify(mEditJobListener).settingsAdded((List<EditJobSettingsSet>) argument.capture());
List<EditJobSettingsSet> value = argument.getValue();
assertTrue(value.contains(mColorSettings));
我不確定這里是否有避免使用ArgumentCaptor<List<EditJobSettingsSet>>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.