java - 使用@Mock 和@InjectMocks

标签 java mocking mockito

我目前正在研究 Mockito 框架,并使用 Mockito 创建了几个测试用例。 但后来我读到,我可以使用 @Mock@InjectMocks 而不是调用 mock(SomeClass.class) - 我唯一的需要做的是用 @RunWith(MockitoJUnitRunner.class) 注释我的测试类或使用 MockitoAnnotations.initMocks(this);@Before方法。

但它不起作用 - @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;
    }
}

我错过了什么?

最佳答案

好吧,我搞错了!!! 我使用了 @InjectMocks 但在 init() 方法中初始化了相同的变量... 所以发生的事情是,mockito 将模拟对象注入(inject)到我的变量中 - 但几秒钟后我运行了它 - 初始化了同一个变量!!!

关于java - 使用@Mock 和@InjectMocks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9076302/

相关文章:

java - Spring MVC : ResponseBodyAdvice doesn't get called for null response from controller

我能否在调试时准确控制函数返回的内容(即 rand())?

scala - 如何使用specs2模拟某些方法仅在第一次抛出异常然后不执行任何操作?

java - 模拟 KeyStore 以测试 KeyStoreException

java - 在每个测试用例后清除内存数据库

java - 什么是类似于哈希表的数据结构,但是不常用的键被删除了?

java - 右键单击 JButton

ruby-on-rails - 如何处理 RSpec 和 Rails 中的模拟嵌套资源?

java - JMockit:如何根据构造函数中给出的参数来模拟方法?

java - PowerMockito调用抛出异常的私有(private)方法失败