Mockito void方法如何检查私有变量?

时间:2016-12-09 22:41:50

标签: java junit mockito

我正在尝试单元测试一个void方法,该方法从数据库获取数据,格式化为map并传递到另一个类。

我已经模拟了数据库调用并返回了我自己的数据,我想检查已经格式化的地图包含正确位置的正确数量的元素和键。

我曾尝试过使用argumentCaptor来做这件事,但是我很难绕过它。

测试方法:

public class MyClass {

@Autowired
private Dao dao;

@Autowired
private AnotherClass anotherClass;

public void format(String, Date) {  
    Map<Object,Object> map = getDataAndFormat(String, Date); 
    anotherClass.doSomething(map);    
}

private Map<Object, Object> getDataAndFormat(String, Date) {
    Map map;
    if (String.equals("A") {
        map = dao.getData(Date);
    }
    else {
        map = dao.getDataSomeThingElse(Date);
    }
}

} 任何帮助非常感谢

谢谢,

所以:这就是我到目前为止所做的:

@InjectMocks
@Autowired
//class to test
private MyClass myClass;

@Mock
Dao dao;

@Captor
private ArgumentCaptor<String> argumentCaptor;

@Captor
private ArgumentCaptor<Date> argumentCaptorB;
public void testFormat() 

{
    when(dao.getData(Matchers.any())).thenReturn(data());

   myClass.format("A",new Date());
}

所以我想使用参数捕获器(但不完全确定如何)从格式方法调用中获取映射并检查返回的映射。我目前拥有的代码是我的所有代码,但我无法断言任何东西,因此我想检查地图包含我期望的内容。希望有意义

1 个答案:

答案 0 :(得分:0)

您想要做的是确认传递给AnotherClass的地图内容。

如果AnotherClass是一个界面,您可以创建AnotherClass的模拟实例并将其注入MyClass。然后,您可以验证是否已使用您选择的参数调用它:

Mockito.verify(mockAnotherClass).doSomething(expectedMap);