【发布时间】:2019-10-16 09:02:36
【问题描述】:
我是 Mockito 的新手。 我有个问题。 我正在尝试模拟一个类并使用返回相同哈希图的哈希图调用该类的方法。 但我看到没有调用模拟方法。如果我确实验证了我收到的消息为“需要但未调用,实际上,与此模拟的交互为零”
这是我的代码 测试类
public class ClassA{
private ClassB bb = new ClassB();
public boolean init() {
bb= new ClassB();
bb.init();
return true;
}
public void methodToTest(){
Map<String, Map<String, Integer>> hashmap= new LinkedHashMap<>();
hashmap = bb.method1(hashmap);
}
public ClassB getBB() {
return bb;
}
public void setBB(ClassB bb) {
this.bb= bb;
}
}
我的测试课
@RunWith(PowerMockRunner.class)
public class TestClassA {
@Test
@PrepareForTest({Utilities.class, Logger.class, LoggerFactory.class})
public void getData() throws JsonProcessingException, JSONException {
Map<String, Map<String, Integer>> hashmap= new LinkedHashMap<>();
Map<String, Map<String, Integer>> newHashmap= new LinkedHashMap<>();
ClassA class2Test= new ClassA ();
ClassB mockClassB= Mockito.mock(ClassB.class);
PowerMockito.whenNew(ClassB.class).withAnyArguments().thenReturn(mockClassB);
Mockito.when(mockClassB.method1(hashmap)).thenReturn(newHashmap);
Mockito.verify(mockClassB).method1(hashmap);
class2Test.methodToTest();
}
}
【问题讨论】:
-
看起来您正试图在您的方法中模拟
bb对象。如果你想这样做,你将不得不使用PowerMockitoswhenNew功能。但通常的建议是你重构你的类(如果你可以调整代码)。 -- 您当前创建的模拟与ClassA无关。此外,您可能忘记为该对象添加变量名,并且您的示例缺少对methodToTest的调用。 -
如果要模拟该字段,则应使用 ReflectionUtils.setField() 方法,因为 Mockito.when 在这种情况下不起作用。
-
我已经用我错过的东西编辑了我的代码。我也尝试在 B 类对象上使用 PowerMockito.WhenNew 但我看到它进入了 B 类的方法而不是模拟它。跨度>