Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用Mockito测试回调参数_Java_Junit_Mocking_Mockito - Fatal编程技术网

Java 用Mockito测试回调参数

Java 用Mockito测试回调参数,java,junit,mocking,mockito,Java,Junit,Mocking,Mockito,我对单元测试非常陌生,不知道如何在这个示例类的回调上测试以下循环: public class Foo { private final ItemLoader loader; private Bar bar; public Foo(ItemLoader loader,Bar bar) { super(); this.loader = loader; this.bar=bar; } public void g

我对单元测试非常陌生,不知道如何在这个示例类的回调上测试以下循环:

public class Foo {

    private final ItemLoader loader;
    private Bar bar;

    public Foo(ItemLoader loader,Bar bar) {
        super();
        this.loader = loader;
        this.bar=bar;
    }

    public void getItems(ItemStore.Callback callback) {
        List<ItemData> itemData = bar.getItemData();
        List<Item> items = this.loader.transform(itemData);
        callback.onItemsLoaded(items);
    }

}
考试一直在进行。所以我需要测试callback.onItemsLoaded是否被调用,以及loader.transform的结果 所以我修改了测试:

    public void testGetItems() {
        List<ItemData> mockItemData = (List<ItemData>) mock(List.class);
        when(mockBar.getItemData()).thenReturn(mockItemData);
        foo.getItems(itemLoadCallback);
        verify(mockItemLoader).transform(mockItemData);
        List<Item> resultItems = verify(mockItemLoader).transform(mockItemData);
        verify(itemLoadCallback).onItemsLoaded(resultItems);
    }
public void testGetItems(){
List mockItemData=(List)mock(List.class);
当(mockBar.getItemData())。然后返回(mockItemData);
getItems(itemLoadCallback);
验证(mockItemLoader).转换(mockItemData);
List resultItems=verify(mockItemLoader).transform(mockItemData);
验证(itemLoadCallback).onItemsLoaded(resultItems);
}
但它在最后一行抱怨说
参数不同


如何修复测试

因为
mockItemLoader
是一个mock,它实际上会从
transform
返回一个空列表。如果你想让它返回不同的东西,你可以设置一个对象让它返回。基本上,这将是您自己的
列表
。因此,您可以存根转换
方法,而不是验证它;并在验证对
OnItemLoaded
的调用时使用相同的
List

    public void getItems(ItemStore.Callback callback) {
        ...
        callback.onItemsLoaded(null);
    }
    public void testGetItems() {
        List<ItemData> mockItemData = (List<ItemData>) mock(List.class);
        when(mockBar.getItemData()).thenReturn(mockItemData);
        foo.getItems(itemLoadCallback);
        verify(mockItemLoader).transform(mockItemData);
        List<Item> resultItems = verify(mockItemLoader).transform(mockItemData);
        verify(itemLoadCallback).onItemsLoaded(resultItems);
    }