小编Reb*_*mes的帖子

Mockito:嘲笑一个将在for循环中循环的arraylist

我有一个测试方法,其中包含以下代码段:

private void buildChainCode(List<TracedPath> lines){
    for(TracedPath path : lines){
        /.../
    }
}
Run Code Online (Sandbox Code Playgroud)

我的单元测试代码如下所示:

public class ChainCodeUnitTest extends TestCase {

    private @Mock List<TracedPath> listOfPaths;
    private @Mock TracedPath tracedPath;

    protected void setUp() throws Exception {
        super.setUp();
        MockitoAnnotations.initMocks(this);
    }

    public void testGetCode() {
        when(listOfPaths.get(anyInt())).thenReturn(tracedPath);

        ChainCode cc = new ChainCode();
        cc.getCode(listOfPaths);

        /.../
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,在运行测试时,测试代码永远不会进入for循环.什么时候我应该指定条件,以便输入for循环?目前我已指定when(listOfPaths.get(anyInt())).thenReturn(tracedPath),但我想它从未使用过.

java unit-testing mockito

21
推荐指数
2
解决办法
5万
查看次数

使用Mockito将参数模拟对象转换为另一个对象

我有一个测试方法,开始遵循:

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
    contextString = adapter.getItem(info.position);
        /.../
    }
Run Code Online (Sandbox Code Playgroud)

我想用Mockito测试它,但如果我声明这样的menuInfo:

@Mock ContextMenuInfo menuInfo
Run Code Online (Sandbox Code Playgroud)

然后我无法编译以下语句:

Mockito.when(menuInfo.position).thenReturn(1);
Run Code Online (Sandbox Code Playgroud)

因为它对于ContextMenuInfo对象无效.我不能将我的对象声明为AdapterView.AdapterContextMenuInfo类,因为那时我在运行时遇到错误.

我知道在Mockito中,mock可能实现多个接口,但同样不适用于类.如何测试上面显示的方法?

java junit android mockito

6
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×2

mockito ×2

android ×1

junit ×1

unit-testing ×1