gpt4 book ai didi

java - 自动模拟一些构造函数参数

转载 作者:行者123 更新时间:2023-12-02 10:19:13 25 4
gpt4 key购买 nike

我写了这段代码:

BackOfficeProperties backOfficeProperties = Mockito.mock(BackOfficeProperties.class);
Mockito
.when(backOfficeProperties.getUrlFrontOffice())
.thenReturn("http://some.valid.url");

this.auditService = Mockito.spy(
new AuditService(
backOfficeProperties,
Mockito.mock(AuditFactory.class),
Mockito.mock(AuditDao.class),
Mockito.mock(RedisDao.class),
Mockito.mock(ObjectMapper.class),
Mockito.mock(I18nResourceBundleMessageSource.class)
)
);

有没有更优雅的方式来编写这段代码?

最佳答案

您可以使用mockito注释来为您执行此操作:

@RunWith(MockitoJunitRunner.class)
public class AuditServiceTest {
@Mock
private BackOfficeProperties backOfficeProperties;
@Mock
private AuditFactory auditFactory;
@Mock
private AuditDao auditDao;
@Mock
private RedisDao redisDao;
@Mock
private ObjectMapper objectMapper;
@Mock
private I18nResourceBundleMessageSource i18nResourceBundleMessageSource;
@InjectMocks
private AuditService auditService;

@Before
public void setup(){
Mockito
.when(backOfficeProperties.getUrlFrontOffice())
.thenReturn("http://some.valid.url");
}

// your tests
}

一些解释:

  • @RunWith(MockitoJunitRunner.class) 使用给定的 Runner 实现执行测试,在本例中是一个 mockito 运行程序,它初始化所有带注释的字段
  • @Mock 表示你想模拟该对象,就像Mockito.mock(SomeClass.class)
  • @InjectMocks 表示您希望将已声明的所有 @Mock 注入(inject)到带注释的字段中,因此它仅使用给定参数调用构造函数.

我还认为您不需要监视您想要测试的服务。如果您仍然需要它,您可以在@InjectMocks注释之后使用@Spy注释

关于java - 自动模拟一些构造函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54456576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com