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

我正在为项目创建测试用例。项目是如何设计的,很难继续进行简单的单元测试,并且似乎缺少一个依赖项,以便使用 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,还尝试使用包装类设置我的值。有什么我可能会丢失的吗?我以前从未见过这种情况。


一只萌萌小番薯
浏览 191回答 3
3回答

慕斯王

首先,你不需要在SpringRunner这里使用。替换@RunWith(SpringRunner.class)为@RunWith(MockitoJUnitRunner.class)其次,如果还是出现这个问题,尝试使用next(假设RequestHandlerImpl是RequestHandler的实现):@InjectMocks RequestHandler request = new RequestHandlerImpl();甚至@InjectMocks RequestHandlerImpl request

慕慕森

这在 mockito2 2.xx 版本中得到解决。org.powermock powermock-api-mockito2 2.0.9 测试

森林海

好的,所以在查看了这个之后,我看到有很多 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和这个问题的答案中提取信息。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java