【问题标题】:Try to make mock test, but there is a loop尝试进行模拟测试,但有一个循环
【发布时间】:2021-11-17 07:02:14
【问题描述】:

尝试编写模拟测试,但有一个“for”循环通过映射键。如何在测试方法中初始化地图。

Test.java

@ExtendWith(MockitoExtension.class)
public class CartRecordServiceTest {
    private MockMvc mockMvc;

    private ObjectMapper objectMapper = new ObjectMapper();

    @Mock
    private CartRecord cartRecords;
    @Mock
    private GoodsService goodsService;
    @Mock
    private GoodsRepository goodsRepository;

    CartRecordService cartRecordService;


    @BeforeEach
    public void setUp() {
        cartRecordService = new CartRecordService(cartRecords, goodsRepository, goodsService);
        mockMvc = MockMvcBuilders
                .standaloneSetup(cartRecordService)
                .build();
    }

    @Test
    public void checkAvailableTest() {
        Map<Long, Long> records = new HashMap<>(Map.of(1L, 2L, 2L, 2L));

        Mockito.when(goodsService.enoughQuantity(any())).thenReturn(true);

        Assertions.assertTrue(cartRecordService.checkAvailable());

        verify(goodsService, times(2)).enoughQuantity(any());
    }
}

Method.java

@Service
public class CartRecordService {
    private final CartRecord cartRecords;
    private final GoodsRepository goodsRepository;
    private final GoodsService goodsService;

    public CartRecordService(CartRecord cartRecord, GoodsRepository goodsRepository, GoodsService goodsService) {
        this.cartRecords = cartRecord;
        this.goodsRepository = goodsRepository;
        this.goodsService = goodsService;
    }

    public boolean checkAvailable(){
//here is map
        final Map<Long, Long> records = cartRecords.getRecords();
        for(Long id : records.keySet()){
            if(!goodsService.enoughQuantity(new CartAdditionDTO(id, records.get(id)))){
                return false;
            }
        }
        return true;
    }
}

日志说: 通缉但未调用: 商品服务.足够数量(); -> 在 com.example.store.ServiceUnitTests.CartRecordServiceTest.checkAvailableTest(CartRecordServiceTest.java:117) 实际上,与此模拟的交互为零。

需要但未调用: 商品服务.足够数量(); -> 在 com.example.store.ServiceUnitTests.CartRecordServiceTest.checkAvailableTest(CartRecordServiceTest.java:117) 实际上,与此模拟的交互为零。

【问题讨论】:

    标签: java spring-boot loops unit-testing mockito


    【解决方案1】:

    尝试在 CartRecord 类上模拟您的 getRecords()

    Map<Long, Long> records = new HashMap<>(Map.of(1L, 2L, 2L, 2L));
    Mockito.when(cartRecords.getRecords()).thenReturn(records);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-24
      • 2013-08-05
      • 2014-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多