Java 测试生成器模式
我正在尝试对一个生成器样式的模式进行单元测试,该模式如下所示(mockedObject被注入到函数中,因此我可以对其进行模拟): 我正在尝试解决如何在不模拟整个构建器对象的情况下测试(使用JUnit和Easymock)。我只需要在结果对象上测试Java 测试生成器模式,java,testing,mocking,builder,Java,Testing,Mocking,Builder,我正在尝试对一个生成器样式的模式进行单元测试,该模式如下所示(mockedObject被注入到函数中,因此我可以对其进行模拟): 我正在尝试解决如何在不模拟整个构建器对象的情况下测试(使用JUnit和Easymock)。我只需要在结果对象上测试param1和param2是否设置了特定值 模拟整个构建器模式会使测试非常脆弱,而这不是我应该首先测试的 有没有(更好的)方法来测试这一点?通过Mokito和JUnit5,您可以在模拟中使用RETURNS\u DEEP\u存根。例如,以下是一个示例: @E
param1
和param2
是否设置了特定值
模拟整个构建器模式会使测试非常脆弱,而这不是我应该首先测试的
有没有(更好的)方法来测试这一点?通过Mokito和JUnit5,您可以在模拟中使用RETURNS\u DEEP\u存根。例如,以下是一个示例:
@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();
}
}
正如您在上面所看到的,我为构建器创建了一个留有很深存根的模拟,然后我可以确保使用适当的参数正确地调用它
@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();
}
}