Jak przetestować dodanie do listy ?

0

Mam taką metodę i chciałbym przetestować czy produkt, który zwraca repository dodał się do listy

 public String showInformationAboutProduct(String barcode) {
        Product product = productRepository.getByBarcode(barcode);
        scannedProducts.add(product);
        return showOnLcd(product);
    }

jak to ugryźć ? Stworzyłem coś takiego ale to nie tak powinno wyglądać.

   @Test
    public void shouldAddProductToReceipt() {
        //given
        product = givenProduct("4582664XX", "orange", new BigDecimal(10));
        scannedProducts = Lists.newArrayList();
        Mockito.when(productRepository.getByBarcode("4582664XX")).thenReturn(product).then(invocationOnMock -> {
            Product argumentAt = invocationOnMock.getArgumentAt(0, Product.class);
            scannedProducts.add(argumentAt);
            return null;
        });
        //when
        singleProductSale.showInformationAboutProduct("4582664XX");
        //then
        assertThat(scannedProducts).containsOnly(product);
    }
0

No cała ta część .then(invocationOnMock.... jest zbędna, a ten ID bym wyciągnął do osobnej zmiennej a nie kopiował. A poza tym to nie rozumiem wtf robisz z tą listą. Przecież ten twój obiekt tą listę powinien mieć, więc sobie sprawdź co na niej jest.
A jak ta lista nie jest dostępna z testu, to może mockuj to showOnLcd i sprawdź czy dobrą rzecz na nim chciałeś wyświetlić?

0

Dokładnie nie wiem dlaczego kombinuje wystarczy zrobić tak jak mówisz.

@Test
    public void shouldAddProductToReceipt() {
        //given
        product = givenProduct("4582664XX", "orange", new BigDecimal(10));
        Mockito.when(productRepository.getByBarcode("4582664XX")).thenReturn(product);
        //when
        singleProductSale.showInformationAboutProduct("4582664XX");
        //then
        assertThat(singleProductSale.getScannedProducts().contains(product)).isTrue();
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1