【发布时间】:2012-01-31 08:09:48
【问题描述】:
我目前正在研究 Mockito 框架,并使用 Mockito 创建了几个测试用例。
但后来我读到,我可以使用 @Mock 和 @InjectMocks 而不是调用 mock(SomeClass.class) - 我唯一需要做的就是用 @987654323 注释我的测试类@ 或在@Before 方法中使用MockitoAnnotations.initMocks(this);。
但它不起作用 - @Mock 似乎不起作用!
这是我的 2 个代码修订版 - 一个使用注释,一个没有。
我做错了什么?
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
}
正如我所说 - 这工作很棒。 但以下不会:
@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;
}
}
我错过了什么?
【问题讨论】:
-
乍一看对我来说还不错。你到底出了什么问题?
-
@Noam 你确定你使用的是正确的导入吗?
-
David - 我收到 NullPointerException。还有 Brice,我相信我使用了正确的导入 - 这里它们是 'import org.jmock.auto.Mock;导入 org.junit.runner.RunWith;导入 org.mockito.InjectMocks;导入 org.mockito.MockitoAnnotations;导入 org.mockito.runners.MockitoJUnitRunner;'