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

Mockito 嘲笑 void 方法

Mockito 嘲笑 void 方法

凤凰求蛊 2023-10-12 17:16:30
我正在使用 Mokito 进行测试,并且有以下场景。我正在尝试测试这段代码public CartResponse processDeleteCartEntry(UUID cartId, Integer rowKey, JsonMessages messages)        throws UnexpectedException {    Cart cart = cartService.getById(cartId);    CartResponse cartResponse = null;    if (cart != null) {        cartService.removeItem(cart, rowKey, messages);        cartResponse = buildCartResponse(cart);    }    return cartResponse;}cartService.removeItem(cart, rowKey, messages);不返回任何内容(无效),这是我的测试用例@Testpublic void testRemoveCartItem() throws UnexpectedException {    Cart cart = getCart();    //given    given(cartService.getById(cart.getId())).willReturn(cart);    //When    CartResponse cartResponse = mobileAppCartHandler.processDeleteCartEntry(cart.getId(), 0, new JsonMessages());    //Then    assertNotNull(cartResponse);    assertEquals(ResponseStatus.OK, cartResponse.getStatus());    assertEquals(1, cartResponse.getEntries().size());}我不想进行实际调用来删除项目,但同时它应该删除该项目,以便我可以断言它。我的购物车有 2 件商品,移除后应该是一件。我应该使用when条件吗?
查看完整描述

2 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

对于 void 方法,您需要首先存根操作。


Mockito.doAnswer(invocation -> {

  // grab args and remove from cart

})

.when(cartService)  // mocked cartService

.removeItem(cart, rowKey, messages);  // You can use argumentMatchers here


查看完整回答
反对 回复 2023-10-12
?
慕慕森

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

对于 void 函数使用doAnswer


@Test

public void testRemoveCartItem() throws UnexpectedException {

    Cart cart = getCart();

    int rowKey = 0;

    JsonMessages messages = new JsonMessages()();


    //given

    given(cartService.getById(cart.getId())).willReturn(cart);


    doAnswer(new Answer<Void>() {

        @Override

        public void answer(InvocationOnMock invocation) throws Throwable {

            //get the arguments passed to mock

            Object[] args = invocation.getArguments();


            //get the mock 

            Object mock = invocation.getMock(); 


            Cart c = (Cart)args[0];

            int row = (int)(Integer)args[1];


            c.removeItem(row); //Just an assumption here


            //return

            return null;

        }

    })

    .when(cartService).removeItem(cart, rowKey, messages);


    //When

    CartResponse cartResponse = mobileAppCartHandler.processDeleteCartEntry(cart.getId(), rowKey, messages);


    //Then

    assertNotNull(cartResponse);

    assertEquals(ResponseStatus.OK, cartResponse.getStatus());

    assertEquals(1, cartResponse.getEntries().size());


}


查看完整回答
反对 回复 2023-10-12
  • 2 回答
  • 0 关注
  • 118 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信