当前位置: 首页 > 面试题库 >

使用@Mock和@InjectMocks

权胜泫
2023-03-14
问题内容

我目前正在研究Mockito框架,并且已经使用Mockito创建了一些测试用例。但后来我读到的不是调用模拟( SomeClass的
的.class)我可以使用@Mock@InjectMocks-我需要做的唯一一件事情就是我的注释测试类@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;
    }
}

我想念什么?


问题答案:

OK,我弄错了!!!我@InjectMocks在init()方法中使用了但已初始化相同的变量…所以发生的是,mockito将模拟对象注入到我的变量中-
但是几秒钟后,我将其运行了-初始化了相同的变量!



 类似资料:
  • 我有这两种方法,在使用Mock实现测试时遇到了困难。我该如何参加考试? 我有麻烦得到Jboss目录而不必启动System.get属性(jboss.server.temp.dir);

  • 测试代码: 错误信息 当我将@injectmocks更改为@mock时,第二个测试是可以的,但第一个测试是错误的。我需要添加到一个stubbing 我不知道怎么做, injectmocks是否必要?

  • 我正在尝试对put请求进行测试,它给了我空指针错误,只是在这种类型的请求中,我不知道为什么请有人帮我,这是我的控制器: 对于测试方法:

  • 我试图用Mockito mock对象替换对象。通常的方法是使用Springockito使用xml: 目前,我正在尝试使用Spring的JavaConfig来完成这项工作。突然之间,Java表达式比xml要详细得多: 我发现了一个名为Springockito annotations的库,它允许您执行以下操作: 显然,更漂亮:)唯一的问题是,这个上下文加载器不允许我对其他bean使用和JavaConf

  • 问题内容: 我正在尝试使用python模拟模块的函数(返回一些外部内容)。 我在导入模块的模拟函数时遇到了一些麻烦。 例如,在我有 我想嘲笑,以便它返回其他内容。 我正在尝试: 如果在另一个模块中被调用,它实际上似乎永远不会返回模拟对象。我在使用方法方面缺少什么吗? 请注意,如果我调用以下内容,则一切正常: 但是,如果从另一个模块内部调用,它将调用原始函数而不是模拟版本: 内容 所以我想我的问题是

  • 我读到过,当使用@Mock时,它应该与@RunBy(MockitoJUnitRunner.class)一起使用,而对于@MockBean,它与@Runwith(SpringRunner.class)一起使用。 然而,对于@Mock,我发现MockitoJunitRunner和SpringRunner都可以互换使用。我很困惑为什么SpringRunner也在这种情况下工作?