Using @Mock and @InjectMocks(使用@Mock 和@InjectMocks)
问题描述
我目前正在研究 Mockito 框架,并使用 Mockito 创建了几个测试用例.但后来我读到,我可以使用 @Mock 和 @InjectMocks 而不是调用 mock(SomeClass.class) - 我唯一的需要做的是用 @RunWith(MockitoJUnitRunner.class) 注释我的测试类或使用 MockitoAnnotations.initMocks(this); 在 @Before代码>方法.
I'm currently studying the Mockito framework and I've created several test cases using Mockito.
But then I read that instead of invoking mock(SomeClass.class) I can use the @Mock and the @InjectMocks - The only thing I need to do is to annotate my test class with @RunWith(MockitoJUnitRunner.class) or use the MockitoAnnotations.initMocks(this); in the @Before method.
但它不起作用 - @Mock 似乎不起作用!这是我的 2 个代码修订版 - 一个使用注释,一个没有.
But it doesn't work - It seems that the @Mock won't work!
Here is my 2 codes revisions - one using the annotations and one without.
我做错了什么?
public class ReportServiceImplTestMockito {
private TaskService mockTaskService; // This is the Mock object
private ReportServiceImpl service;
@Before
public void init(){
service = new ReportServiceImpl();
mockTaskService = mock(TaskServiceImpl.class);
service.setTaskServiceImpl(mockTaskService);
}
/// ...
Some tests
}
正如我所说 - 这工作很棒.但以下不会:
As I said - this work great. But the following wont:
@RunWith(MockitoJUnitRunner.class)
public class ReportServiceImplTestMockito {
@Mock
private TaskService mockTaskService;
@InjectMocks
private ReportServiceImpl service;
// Some tests
}
这里是 ReportServiceImpl 类:
@Service
public class ReportServiceImpl implements ReportService {
@Autowired
private TaskService taskServiceImpl;
public ReportServiceImpl(){}
public ReportServiceImpl(TaskService taskService){
this.taskServiceImpl = taskService;
}
public void setTaskServiceImpl(TaskService taskServiceImpl) {
this.taskServiceImpl = taskServiceImpl;
}
}
我错过了什么?
推荐答案
好吧,我搞错了!!!我使用了 @InjectMocks 但在 init() 方法中初始化了相同的变量...所以发生的事情是,mockito 将模拟对象注入到我的变量中 - 但几秒钟后我运行了它 - 初始化了同一个变量!!!
O.K, I got my mistake!!!
I've used the @InjectMocks but initialized the same variable in the init() method...
So what happened was that mockito injected the mock objects to my variable - but seconds later I ran it over - initializing that very same variable!!!
这篇关于使用@Mock 和@InjectMocks的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:使用@Mock 和@InjectMocks
基础教程推荐
- 存储 20 位数字的数据类型 2022-01-01
- REST Web 服务返回 415 - 不支持的媒体类型 2022-01-01
- Spring AOP错误无法懒惰地为此建议构建thisJoinPoin 2022-09-13
- 如何对 Java Hashmap 中的值求和 2022-01-01
- 使用堆栈算法进行括号/括号匹配 2022-01-01
- Struts2 URL 无法访问 2022-01-01
- RabbitMQ:消息保持“未确认"; 2022-01-01
- 修改 void 函数的输入参数,然后读取 2022-01-01
- 问题http://apache.org/xml/features/xinclude测试日志4j 2 2022-01-01
- 无法复制:“比较方法违反了它的一般约定!" 2022-01-01
