jak poprawic istniejacy test zeby zadziałał

0

Mam taka klase, ktora sobie testuje:
https://paste.ofcode.org/hTDARqUZqmmmgrur4shaRT

test:

@RunWith(MockitoJUnitRunner.class)
public class ModelCreatorTest {

    @Mock
    private RestTemplate mockRestTemplate;
    @Mock
    private UriBuilderHelper mockUriBuilderHelper;

    private ModelCreator modelCreatorUnderTest;

    @Before
    public void setUp() {
        initMocks(this);
        modelCreatorUnderTest = new ModelCreator(mockRestTemplate, mockUriBuilderHelper);
    }

    @Test
    public void testGitDetailsInformation() throws Exception {
        // Setup
        final String owner = "owner";
        final String repository = "repository";

        String fakeString = "test";
        Date date = new Date();
        GitModelDetailsDto expectedResult = new GitModelDetailsDto(fakeString, fakeString, fakeString, fakeString, date);

        when(mockRestTemplate.getForEntity("uri", GitModelDetailsDto.class)).thenReturn(GitModelDetailsDto.class);
        when(mockUriBuilderHelper.uriBuilder("owner", "repositoryName")).thenReturn("result");


        // Run the test
        final GitModelDetailsDto result = modelCreatorUnderTest.gitDetailsInformation(owner, repository);

        // Verify the results
        assertEquals(expectedResult, result);
    }
}

Problem mam z dwoma linijkami gdzie jest when

0

Problem to ja mam z całym tym kodem i testem, ale spoko, pewnie się da uratować.

Musisz tylko odpowiedzieź an jedno ważne pytanie: co chcesz przestestować?.

Możemy sobie, dla oszczedzenia czasu odpuścić "zabawną" wymianę zdań, kiedy napiszesz, że chcesz przetestować metodę gitDetailsInformation, a ja (lub ktoś inny) odpisze, że jednak, na pewno nie.
Kombinuj. Jak wykombinujesz to pewnie będziesz wiedział co zrobić.

0

@jarekr000000 mojego punktu widzenia najważniejsze jest, żeby ta metoda zwracała obiekt typu GitModelDetailsDto oraz rzucic wyjątek jeśli nic nie jest zwracane. Wszelkie inne sugestie dotyczące kodu chętnie wysłucham:)

0

żeby ta metoda zwracała obiekt typu GitModelDetailsDto
Jeśli spojrzysz na sygnaturę tej metody to raczej ciężko żeby coś innego zwracała. Ten test już masz załatwiony przez kompilator.
Wymyśl coś trudniejszego.
(Nulla odrzucam, zakładam, że nie pracujesz z nulltystami).

0

@jarekr000000
mam też logikę mapowanie jednych wartości z restemplate do obiektu dto, może to powinienem przetestować?

0
masjav napisał(a):

@jarekr000000
mam też logikę mapowanie jednych wartości z restemplate do obiektu dto, może to powinienem przetestować?

To już lepszy kierunek. Nie wiadomo czy zupełnie sensowny,

Dodatkowy hint:
Wskaż miejsce w twoim kodzie, gdzie znajduje się jakaś logika.

Przy okazji: twoje użycie Optional jest ( w najlepszym przypadku ) zbędne.

0

@jarekr000000 dziękuję za wskazówkę, logika zawiera się jeszcze tylko w cacheEvict (mogę przetestować czy wartości się cachują )oraz URI- ale to już rzecz bardzo standardowa i zakładam że URI builder jest przetestowany. Dobry kierunek?

0

No to jakby się sprawa rypła. Bo jesli zależy Ci na tym potestowaniu Cache (co ma sens). To wtedy musisz odpalać testy razem z kontekstem Springowym.
Ale tu nie pomogę, bo akurat nie chcę tego raka (Springa i adnotacji) rozświewać. I tak już jest wsytarcająco dużo.

0

@jarekr000000: a z Twojego punktu widzenia oprócz rzeczy, o których wspomniałem co jeszcze powinienem sprawdzić używając testów jednostkowych?

3

Nie wiem, zależy czego potrzebujesz.

Ja sobie radzę tak:

  1. najpierw stwierdzam (bywa że) - czegoś potrzebuje.
  2. potem pisze test - jakby to miało działać - wymyślam api.
  3. potem piszę implementację.
  4. potem kasuje i daję juniorowi do zrobienia, przynajmniej będzie działało

pojęcie testów jednostkowych mam w głębokim poważaniu. To jakiś nonsens (w sensie nie widzę przydatności terminu). W kodzie mam po prostu testy na różnym poziomie abstrakcji - część niskopoziomowych kwalifikuje sie jako jednostkowe, a od jakiegoś poziomu te testy przechodzą w intgracyjne. Ale nie widzę różnicy - piszę je dokładnie tak samo. (given, when,then).

EDIT:
kilka razy już pisaliśmy na tym forum - nie testujemy metod, klas ani pakietów. Testujemy poszczególne funkcje (własności) - czyli inaczej - oczekiwania.
U Ciebe oczekiwanie, że Cache zadziała i nie bedzie zbędnych wywołań Github jest sensowną rzeczą do sprawdzenia/ testem.

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