我有一个这样的方法,我试图用Mockito测试:
public class MiscUtil{
public int getValue(String key){
Properties properties = new Helper().getProperties() //This is the method
//I need to mock
return properties.get(key)
}
这是测试类:
public class MiscUtilTest{
public void testGetBooleanValue() {
Properties properties = new Properties();
properties.setProperty(MY_SPECIAL_INT_PROPERTY, 10);
// Mock Helper
Helper mock = Mockito.mock(Helper.class);
// mock the method getProperties()
Mockito.when(mock.getProperties()).thenReturn(properties);
// Assert that the getValue() method
Assert.assertEquals(10,MiscUtil.getValue(MY_SPECIAL_int_PROPERTY));
然而,该方法并未被嘲笑。我是否必须将实际的模拟实例传递给MiscUtil类才能使模拟生效? MiscUtil类不允许我将Helper对象传递给它。在JMockit中模拟任何类的特定方法非常容易,即使上层类可能无法访问它。是否有可能在Mockito中这样做?
答案 0 :(得分:0)
如果您只是尝试测试getValue()
方法的行为,则需要提供(模拟)方法所需的对象。
MiscUtil
类需要Helper
对象的实例。所以你需要通过MiscUtils'传递这个对象。构造函数(或其他方式),因为它是此类的依赖。
所以,如果它是依赖并且你不想要测试我应该嘲笑,你只会打电话给你的真实方法想要测试(MiscUtil.getValue(MY_SPECIAL_int_PROPERTY)
)。
答案 1 :(得分:0)
你必须传回模拟对象,否则,Mockito将不知道它的getProperties方法被调用。
您需要添加一个方法来在MiscUtil类中注入Helper:
private Helper helper;
public Helper getHelper()
{
return helper;
}
public void setHelper(Helper helper)
{
this.helper = helper;
}
更新MiscUtil类以使用您注入的Helper:
public int getValue(String key){
Properties properties = getHelper().getProperties() //This is the method
//I need to mock
return properties.get(key)
}
然后将此模拟对象重新设置回MiscUtil:
MiscUtil.setHelper(mock);
现在,Mockito嘲笑应该有效