-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Endre søknadsbehandlingserviceiverksett-tester #664
Conversation
Jeg er ikke veldig for å endre returtyper i implementasjonen. For at det stub-argumentet skal holde vann, kan vi gjøre noe som dette:
|
Jeg er også nysgjerrig på Mockito sin strict mode. Kan legge til denne i Og deretter denne over testklassene: |
grunnlagsdata = Grunnlagsdata.IkkeVurdert, | ||
vilkårsvurderinger = Vilkårsvurderinger.Søknadsbehandling.IkkeVurdert, | ||
) | ||
val expected = søknadsbehandlingIverksattInnvilget().second.copy(id = behandling.id) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm 🤔 Dette kan jo potensielt være litt skjørt. Men jeg ser kodelinjebesparelsen :]
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Gitt at testdataene henger sammen så skal det være greit. Så må jo ikke testdataene endres da selvsagt😛 Grunnen til den copy-id tingen er at id-blir generert hver gang, og vil derfor bli diff
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Trenger vi egentlig å matche hele objektet, eller kunne det holde at det er av riktig type f.eks.?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Det er jo servicen som blant annet er ansvarlig for å sette riktig attestant. Men dersom det byttes til å bruke en copy, vil jo ikke denne testen avdekke det. Så jeg er for at vi sjekker på hele objektet, spesielt når det er så enkelt. Da får vi og testet sammenhengen mellom testdataene 🤷
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Vi kan ha egne tester på at spesifikke ting blir satt på objektet, sånn som f.eks. riktig attestant. Det er kanskje en detalj, men jeg vil nok heller at vi har spesifikke tester enn at det ser ut som vi matcher på hele objektet litt tilfeldig.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Jeg likte denne jeg :) Den løser i hvert fall at a) en test feiler dersom uønskede felter endres og b) en test feiler dersom vi ikke legger til attestanten som kom fra routen. Her burde vi nok heller brukt parametre inn mot funksjonen (id+attestant).
Men hvor mange tester vi har for å sikre dette, spiller ikke så mye rolle for meg.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ja, tenker det er en filleting mot et par andre tilfeller vi har i testene, men helt generelt ville jeg heller at vi hadde hatt det sånn at spesifikk test X, Y og Z feiler dersom hhv. X, Y og Z går galt, enn at generell test A feiler hvis enten X, Y eller Z går galt.
Men tenker det er OK sånn, jeg hadde ikke tatt opp denne tingen hvis vi ikke hadde startet diskusjonen rundt "new opp hele objektet" vs. copy.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Dersom vi deler opp testene på denne måten er vi da priset at testene X,Y og Z har samme setup (typisk samme private funksjon). Noe som også gir mening i forbindelse med refaktoreringer.
...tlin/no/nav/su/se/bakover/service/søknadsbehandling/SøknadsbehandlingServiceIverksettTest.kt
Outdated
Show resolved
Hide resolved
...tlin/no/nav/su/se/bakover/service/søknadsbehandling/SøknadsbehandlingServiceIverksettTest.kt
Outdated
Show resolved
Hide resolved
...tlin/no/nav/su/se/bakover/service/søknadsbehandling/SøknadsbehandlingServiceIverksettTest.kt
Outdated
Show resolved
Hide resolved
...tlin/no/nav/su/se/bakover/service/søknadsbehandling/SøknadsbehandlingServiceIverksettTest.kt
Show resolved
Hide resolved
...tlin/no/nav/su/se/bakover/service/søknadsbehandling/SøknadsbehandlingServiceIverksettTest.kt
Show resolved
Hide resolved
vedtak = it as VedtakSomKanRevurderes.EndringIYtelse.InnvilgetSøknadsbehandling | ||
it.behandling shouldBe expected | ||
}, | ||
verify(serviceAndMocks.utbetalingService).lagreUtbetaling(any(), anyOrNull()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
En idé jeg hadde var at vi nå har mulighet til å sjekke at session-objektet på disse TransactionContext er et samme (da verifiserer vi i hvert fall at ting er under samme transaksjonen)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Det er sant, men noen idé om hvordan vi får testet det lett uten å måtte lage en mutable variabel?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Må ha en mutable variabel på et eller annet vis da ja. Kan jo prøve en spy() f.eks.
...tlin/no/nav/su/se/bakover/service/søknadsbehandling/SøknadsbehandlingServiceIverksettTest.kt
Show resolved
Hide resolved
...tlin/no/nav/su/se/bakover/service/søknadsbehandling/SøknadsbehandlingServiceIverksettTest.kt
Outdated
Show resolved
Hide resolved
...tlin/no/nav/su/se/bakover/service/søknadsbehandling/SøknadsbehandlingServiceIverksettTest.kt
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Liker veldig godt fjerningen av verify der det ikke er nødvendig.
grunnlagsdata = Grunnlagsdata.IkkeVurdert, | ||
vilkårsvurderinger = Vilkårsvurderinger.Søknadsbehandling.IkkeVurdert, | ||
) | ||
val expected = søknadsbehandlingIverksattInnvilget().second.copy(id = behandling.id) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Trenger vi egentlig å matche hele objektet, eller kunne det holde at det er av riktig type f.eks.?
...tlin/no/nav/su/se/bakover/service/søknadsbehandling/SøknadsbehandlingServiceIverksettTest.kt
Show resolved
Hide resolved
...tlin/no/nav/su/se/bakover/service/søknadsbehandling/SøknadsbehandlingServiceIverksettTest.kt
Show resolved
Hide resolved
...tlin/no/nav/su/se/bakover/service/søknadsbehandling/SøknadsbehandlingServiceIverksettTest.kt
Show resolved
Hide resolved
...tlin/no/nav/su/se/bakover/service/søknadsbehandling/SøknadsbehandlingServiceIverksettTest.kt
Show resolved
Hide resolved
) | ||
verify(serviceAndMocks.behandlingMetrics).incrementAvslåttCounter(BehandlingMetrics.AvslåttHandlinger.PERSISTERT) | ||
verify(serviceAndMocks.ferdigstillVedtakService).lukkOppgaveMedBruker(any()) | ||
verify(serviceAndMocks.observer).handle( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tenker det bør være egne tester for at statistikk blir pushet, er ikke viktig for iverksetting.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Men det er jo iverksetting per tidspunkt som sender statistikken (enig i at den bør flyttes sammen med metrikkene til asynk-jobben). Men så lenge iverksett gjør det, forventer jeg at en test feiler dersom jeg sletter den koden.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Enig i det, men jeg tenker testen som da feiler burde vært testen "publiserer statistikk ved iverksetting" e.l. Ideelt sett hadde vi kunnet flytte/endre på statistikk-sideeffekten uten at iverksettingstesten brekker.
), | ||
) shouldBe expectedAvslag.right() | ||
|
||
verify(serviceAndMocks.søknadsbehandlingRepo).hent(avslagTilAttestering.id) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tenker med alle verifyene her også, at testen kanskje fortjener et forsøk på et annet navn. Den tester jo nå både at iverksetting blir et avslag, gitt inputen, men også at iverksettingen innebærer at vi henter en behandling, lager et dokument, lagrer en behandling, lagrer et vedtak, lagrer et dokument (av noe slag) og ferdigstiller et vedtak.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ja, det er en slags fullstendig happy-case, noe jeg egentlig tenker at er greit. Avveiningen her blir litt mellom om man skal ha flere tester med akkurat de samme mocksa, og kun verifies på enkelte features i metoden, eller en som tester hele happycasen
Litt usikker på hvor revolusjonerende dette egentlig ble, men fiksa nå hvert fall dette:
verify
på alle metodene, og også argumenter der det er nødvendig (litt sånn som før)verify
s. Hvorfor? Fordi hvis man testen kaller på en metode som ikke er mocket, så vil mocken feile. OBS: Dette stemmer ikke nødvendigvis for Unit-metoder. Kanskje vi burde ha som regel at vi unngår Unit-metoder og heller alltid returnerer noe?verify
s, men her er det egentlig barepubliserUtbetaling
som er kritisk (siden lagre til databasen hos er i transaction). Den er ikke Unit og vil derfor krasje mocken om den blir kalt på. Ergo er det ikke behov forverify
Fila ble nesten halvparten så stor, og personlig synes jeg testene er mye enklere å lese. Og ikke minst enklere å jobbe med.
Innspill?