测试构建器模式

问题描述 投票:7回答:1

我正在尝试对看起来像这样的生成器样式模式进行单元测试(将ockedObject注入到函数中,以便我可以对其进行模拟):

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

mockedObject.use(thing);

我正在尝试找出如何测试这一点(使用JUnit和Easymock),而不必模拟整个构建器对象。我需要测试的结果对象是param1param2设置了特定值。

模拟整个构建器模式会使测试非常脆弱,而这并不是我应该测试的内容。

是否有(更好的)测试方法?

java testing mocking builder
1个回答
0
投票

通过Mokito和JUnit5,您可以将RETURNS_DEEP_STUBS用于您的模拟。例如,下面是一个示例:

@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();

 }


}

正如您在上面看到的,我为构建器创建了一个深深的存根模拟,然后可以确保使用正确的参数正确地调用了它。

© www.soinside.com 2019 - 2024. All rights reserved.