2016-07-22 10 views
2

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?

+0

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

+0

versuchen PowerMockito –

+1

@IndraUprade danke für den Vorschlag, aber ich bin mir nicht sicher, ob ich es verstehe. Wie könnte PowerMockito dieses Problem beheben? – felipecao

Antwort

0

Ich fand heraus, das Problem war Cache-Einstellungen auf Spring Sicherheitstestkonfigurationen.

+2

Sie brauchen sich nicht zu entschuldigen, aber wenn Sie zukünftigen Lesern helfen möchten, ihre Zeit optimal zu nutzen, fügen Sie sowohl Ihre Frage als auch Ihre Antwort zu Ihrer Konfiguration und zu den Konfigurationseinstellungen hinzu, die Sie für Ihren Test benötigen funktioniert besser. –