java - Mockito 测试自动连线字段

标签 java spring mocking mockito

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;

    ...

顺便说一句:@MockinitMocks(this) 一起和printaskExecutor = Mockito.mock(PrintTaskExecutor.class);执行同样的操作,可以跳过后面的语句。

关于java - Mockito 测试自动连线字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30495067/

相关文章:

java - log.info (“dsasdds {}” , var) 和 log.info (“dsasdds ” + var) 之间的区别?

java - 如何在调用 JVM 的关闭 Hook 之前关闭 @SpringBootTest 上下文(一次,在所有 JUnit 测试之后)

java - 在我的目标中模拟 Java 对象,其中目标没有可用的 setter

java - Mockito 中 spy 的详细模式

java - 将递归组合查找算法转换为迭代算法以避免 GC Overhead Limit Exceeded 错误

java - 编译到 Android 设备时出现 React Native 全新构建错误

java - 如何按顺序迭代PriorityBlockingQueue

java - Spring MVC 4.0中JSON表单参数的自动转换

spring - common.KafkaException : com. fastxml.jackson.databind.ser.std.StringSerializer 不是 org.apache.kafka.common.serialization.Serializer 的实例

python - 模块级别的模拟字典