Ich habe eine Testklasse mit 3 Testmethoden. Im Grunde, was Ich mag tun würde, ist haben verschiedene Kunden auf jedem Test verwendet wird, und die Berechtigungen für jeden Kunden zugeordnet sind, in einer gemeinsamen Methode herausgefunden, dass so ziemlich wie folgt aussieht:Speichert Mockito dannAnswer-Blöcke?
protected void setupCustomerPermissions(final IntegrationTestCustomer customer)
{
System.out.println("customer = " + customer.getName());
when(permissionClient.createToken()).thenAnswer(invocation ->
{
System.out.println("customer again = " + customer.getName());
if (customer.equals(IntegrationTestCustomer.KRISTIN())) {
return createToken(IntegrationTestCustomer.KRISTIN());
} else if (customer.equals(IntegrationTestCustomer.FRED())) {
return createToken(IntegrationTestCustomer.FRED());
} else if (customer.equals(IntegrationTestCustomer.DANIELA())) {
return createToken(IntegrationTestCustomer.DANIELA());
}
throw new IllegalStateException("IntegrationTestCustomer:[" + customer.getName() + "] shouldn't have got this far");
});
}
Grundsätzlich habe ich 3 Tests: Der erste nutzt KRISTIN als Kunde, der zweite FRED und der dritte KRISTIN.
Beachten Sie die System.out.println
Anrufe. Wenn die ersten Testläufe (mit KRISTIN als Kunde), ist es das, was gedruckt wird:
customer = KRISTIN
customer again = KRISTIN
So weit, so gut. Jetzt kommt der lustige Teil ... Der zweite Test (die FRED als Kunde verwendet) druckt diese:
customer = FRED
customer again = KRISTIN
Und dann den dritten Test, die KRISTIN wieder verwendet, druckt:
customer = KRISTIN
customer again = FRED
Ich habe keine Ahnung, was ich hier falsch mache ... sollten beide System.out.println
Anrufe den gleichen Kunden drucken? Hat Mockito eine Art Caching?
Seitennotiz: Vielleicht möchten Sie hören http://www.se-radio.net/2016/05/se-radio-episode-256-jay-fields-on-working-effectively-with-unit- Tests/... der Typ dort argumentiert, dass genau diese Idee, solche "Testrollen" wie Kristin und andere in deinen Unit Tests zu haben, heutzutage ein ** Antipattern ** ist. – GhostCat
versuchen PowerMockito –
@IndraUprade danke für den Vorschlag, aber ich bin mir nicht sicher, ob ich es verstehe. Wie könnte PowerMockito dieses Problem beheben? – felipecao