为了账号安全,请及时绑定邮箱和手机立即绑定

是什么导致了这个 mockito 异常?

是什么导致了这个 mockito 异常?

一只萌萌小番薯 2022-07-20 21:04:27
我正在为项目创建测试用例。项目是如何设计的,很难继续进行简单的单元测试,并且似乎缺少一个依赖项,以便使用 Mockito 来模拟函数和对象。这是我所拥有的:@RunWith(SpringRunner.class)public class RequestHandlerTest {    private byte[] buffer;    private Connection conn;    private Server server;    @Mock ResponseHandler response;    @Mock Services serviceImpl;    @InjectMocks RequestHandler request;    @Before    // This just creates the buffer in order to simulate sending and     // receiving a response across a server and client    public void createRequests();     @After    public void cleanUpBuffer(); // Cleans up buffer after test    @Test    public void TestReceiveMessage() {        doNothing().when(response.updataCache(conn, reqID));        ... // Do nothing for service function        handler.receiveMsg(conn, buffer);        // Verify request    }}我不确定是什么原因造成的,以及需要做些什么来解决这个问题。我尝试设置初始化 Mockito,使用 @Autowired 将 @Mock 更改为 @MockBean,还尝试使用包装类设置我的值。有什么我可能会丢失的吗?我以前从未见过这种情况。
查看完整描述

3 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

首先,你不需要在SpringRunner这里使用。替换@RunWith(SpringRunner.class)@RunWith(MockitoJUnitRunner.class)

其次,如果还是出现这个问题,尝试使用next(假设RequestHandlerImpl是RequestHandler的实现):

@InjectMocks RequestHandler request = new RequestHandlerImpl();

甚至@InjectMocks RequestHandlerImpl request



查看完整回答
反对 回复 2022-07-20
?
慕慕森

TA贡献1856条经验 获得超17个赞

这在 mockito2 2.xx 版本中得到解决。

org.powermock powermock-api-mockito2 2.0.9 测试


查看完整回答
反对 回复 2022-07-20
?
森林海

TA贡献2011条经验 获得超2个赞

好的,所以在查看了这个之后,我看到有很多 bean 正在被 Autowired。所以我需要为我所依赖的类添加上下文配置。然后我可以使用 Mock 和 Inject Mock 的注释。所以我的夹具变成了这样:


@RunWith(SpringRunner.class)

@ContextConfiguration(classes = {RequestHandler.class, ResponseHandler.class,

      DataCache.class, Service.class})

public class RequestHandlerTest {

   @Mock private ResponseHandler response;

   @Mock private Service serv;


   @InjectMocks

   @Resource

   private RequestHandler request;


   public void setUp() {

      MockitoAnnotations.initMocks(this);


      // Add mock data logic using doAnswer or doNothing for void methods if needed 

      // and adding when().then() for mocking return values for other functions


   }


   @Test

   public void makeRequest() {

      assertTrue(request.sendRequest(Object message));

   }

}

从Mocking Void Methods with Mockito和这个问题的答案中提取信息。


查看完整回答
反对 回复 2022-07-20
  • 3 回答
  • 0 关注
  • 190 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号