7 Stimmen

Testen eines Builder-Musters

Ich versuche, Unit-Test ein Builder-Stil-Muster, das wie folgt aussieht (mockedObject wird in die Funktion injiziert, so dass ich es mocken kann):

Thing thing = 
    mockedObject.createThing()
     .addParam1()
     .addParam2(mockedObject.createParam2()
                   .someData()
                   .build())
    .build();

mockedObject.use(thing);

Ich versuche, herauszufinden, wie dies (mit JUnit und Easymock) zu testen, ohne das gesamte Builder-Objekt mock out. Alles, was ich brauche, um auf das resultierende Objekt zu testen ist, dass param1 y param2 wurden mit bestimmten Werten festgelegt.

Mocking out die gesamte Builder-Muster würde den Test extrem spröde und seine nicht, was ich sollte mit zu beginnen.

Gibt es eine (bessere) Möglichkeit, dies zu testen?

0voto

Siamand Punkte 1040

Über Mokito und JUnit5 können Sie RETURNS_DEEP_STUBS für Ihren Mock verwenden. Hier ist zum Beispiel ein Beispiel:

@ExtendWith(MockitoExtension.class)
@RunWith(JUnitPlatform.class)
class TargetClassTest {
 private static final long SUBJECT_ID;

 @Mock 
 private AuthService authService;

 @Mock(answer = Answers.RETURNS_DEEP_STUBS)  // deeply stubbed
 private Logger logger;

 @InjectMocks
 private TargetClass service;

 @Test
 void test_whenSomething_thenResult() {
    service.command(SUBJECT_ID);

    verify(logger,times(1)).builder(eq(SUBJECT_ID));
    verify(loggerbuilder(eq(SUBJECT_ID)),times(1)).thirdPartyLog(eq(DATA_DOG));
    verify(loggerbuilder(eq(SUBJECT_ID)).thirdPartyLog(DATA_DOG),times(1)).send();

 }

}

wie Sie oben sehen können, habe ich eine tief stubbed Mock für den Builder dann konnte ich sicherstellen, dass es richtig mit richtigen Parameter aufgerufen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X