使用@Mock和@InjectMocks [英] Using @Mock and @InjectMocks

查看:3138
本文介绍了使用@Mock和@InjectMocks的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在研究Mockito框架,并且我使用Mockito创建了几个测试用例。
然后我读到了而不是调用mock( SomeClass .class)我可以使用 @Mock @InjectMocks - 我唯一需要做的就是用 @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 class:

@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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆