mockito 测试时出现java.lang. UndeletedOperationException

qc6wkl3g  于 5个月前  发布在  Java
关注(0)|答案(1)|浏览(45)

试着写测试,用mocks操作。当Assert发生时会有异常。

CardRecordServiceTest.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 enougthGoodsToAddRecordNew(){
        CartAdditionDTO cartAdditionDTO = new CartAdditionDTO(1L, 15L);

        Mockito.when(goodsService.enoughQuantity(cartAdditionDTO)).thenReturn(true);
        Mockito.when(cartRecords.getRecords()).thenReturn(Map.of(2L,2L));

        Assertions.assertTrue(cartRecordService.addRecord(cartAdditionDTO));

        verify(cartRecords,times(2)).getRecords();
        verify(goodsService).enoughQuantity(any(CartAdditionDTO.class));
    }

字符串

CartRecordService.java

public boolean addRecord(CartAdditionDTO cartAdditionDTO) {
        if(!goodsService.enoughQuantity(cartAdditionDTO)){
            return false;
        }
        if (cartRecords.getRecords().containsKey(cartAdditionDTO.getId())) {
            Long newQuantity = cartRecords.getRecords().get(cartAdditionDTO.getId()) + cartAdditionDTO.getQuantity();
            if(goodsService.enoughQuantity(new CartAdditionDTO(cartAdditionDTO.getId(), newQuantity))){
                cartRecords.getRecords().put(cartAdditionDTO.getId(), newQuantity);
                return true;
            }
            return false;
        }
// here is an error at put
        cartRecords.getRecords().put(cartAdditionDTO.getId(), cartAdditionDTO.getQuantity());
        return true;
    }

日志

java.lang. UndefaultedOperationException at java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:142)at java.base/java.util.ImmutableCollections. uoe $AbstractImmutableMap.put(ImmutableCollections.java:1072)at com.example.store.service.CartRecordService.addRecord(CartRecordService.java:77)at com.example.store.ServiceUnitTests.CartRecordServiceTest.enougthGoodsToAddRecordNew(CartRecordServiceTest.java:69)

pes8fvy9

pes8fvy91#

问题是你的代码试图修改一个map,但你的测试代码是用Map.of(...)设置的,它返回一个不可变的map。请改用new HashMap<>(Map.of(....))

相关问题