public interface Dummy {
public returnSomething doDummyWork(arg1, agr2);
}
public class A implements Dummy {
@AutoWired
PrintTaskExecutor printTaskExecutor;
public returnSomething doDummyWork(arg1, agr2) {
callingVoidMethod();
return something;
}
public void callingVoidMethod() {
printTaskExecutor.printSomething(arg1, arg2);
}
}
public class testDummy {
@Autowired
Dummy dummyA//this bean is configured in ApplicationContext.xml and it works fine.
@Mock
PrintTaskExecutor printaskExecutor;
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
printaskExecutor = Mockito.mock(PrintTaskExecutor.class);
Mockito.doNothing().when(printaskExecutor).printSomething(anyString(), anyString());
}
@Test
Public void testA
{
Dummy.doDummyWork(arg1, arg2);//I m giving actual arguments
//instead of moocking it calls the original method.
Mockito.verify(printaskExecutor, times(1)).printSomething(anyString(), anyString());
}
}
我正在测试的类中有一个 Autowiring 的 TaskExecutor,我想模拟它。我在我的代码中尝试过这个,它调用实际的方法而不是不执行任何操作,并且在验证时出错,表示没有发生交互。我该如何处理这种情况?
最佳答案
我尽量避免在一次测试中同时使用 Mockito 和 Bean 容器。这个问题有解决方案。如果你使用 Spring 你应该使用 @RunWith(SpringJUnit4Runner.class)
。有关此主题的更多信息:Injecting Mockito mocks into a Spring bean
干净的方式:实际上是你的类(class) testDummy
不测试Dummy
但是A.所以你可以用以下方式重写你的类:
public class testA {
@Mock
PrintTaskExecutor printTaskExecutor;
@InjectMocks
A dummyA;
...
顺便说一句:@Mock
与 initMocks(this)
一起和printaskExecutor = Mockito.mock(PrintTaskExecutor.class);
执行同样的操作,可以跳过后面的语句。
关于java - Mockito 测试自动连线字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30495067/