1
resposta

como mockar variaveis internas?

no meu service, ele chama essa classe de properties:

@Getter
@Setter
@Configuration
@ConfigurationProperties(prefix = "item")
public class ItemProperties {
    private Long maximumQuantity;
    private Map<ChannelEnum, Long> maximumQuantityByChannel;

    public Long getMaximumItemsQuantity(ChannelEnum channel) {
        return maximumQuantityByChannel.getOrDefault(channel, maximumQuantity);
    }
}

ele chama o metodo getMaximumItemsQuantity, mockar a resposta do metodo ok, mas quero q meu teste seja especifico pra vir o valor do map ou do long ali, preciso mockar um dos dois, mas nada q testei deu certo

when(properties.getMaximumQuantity()).thenReturn(1L);
        // when(properties.getMaximumItemsQuantity(ChannelEnum.TESTE)).thenReturn(2L);
        Map<ChannelEnum, Long> maxMap = Map.of(ChannelEnum.TESTE, 2L);
        when(properties.getMaximumQuantityByChannel()).thenReturn(maxMap);
       // when(properties.getMaximumQuantityByChannel().getOrDefault(ChannelEnum.TESTE, 1L)).thenReturn(2L);

        //when(maxMap.getOrDefault(ChannelEnum.TESTE, 1L)).thenReturn(2L);

como faço?

1 resposta

Olá, Jade!

Pelo código que você compartilhou, parece que você está tentando mockar a resposta de um método que retorna um valor do tipo Map<ChannelEnum, Long>.

Uma alternativa para mockar esse tipo de retorno seria utilizar o método thenReturn() do Mockito para retornar o valor esperado quando o método getMaximumItemsQuantity() for chamado. Por exemplo:

when(properties.getMaximumItemsQuantity(ChannelEnum.TESTE)).thenReturn(2L);

Dessa forma, quando o método getMaximumItemsQuantity() for chamado com o parâmetro ChannelEnum.TESTE, ele retornará o valor 2L.

No entanto, se você quiser mockar o retorno do método getMaximumQuantityByChannel() e retornar um Map<ChannelEnum, Long>, você pode fazer da seguinte maneira:

Map<ChannelEnum, Long> maxMap = Map.of(ChannelEnum.TESTE, 2L);
when(properties.getMaximumQuantityByChannel()).thenReturn(maxMap);

Assim, quando o método getMaximumQuantityByChannel() for chamado, ele retornará o maxMap que você definiu.

Bons estudos!