Java 测试生成器模式

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

我正在尝试对一个生成器样式的模式进行单元测试,该模式如下所示(mockedObject被注入到函数中,因此我可以对其进行模拟):

我正在尝试解决如何在不模拟整个构建器对象的情况下测试(使用JUnit和Easymock)。我只需要在结果对象上测试
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();

 }


}