【发布时间】:2021-12-27 14:43:43
【问题描述】:
您好,我正在努力按照下面的方法编写一个模拟测试;
下面是我的代码;
@Component
public class CodeConfigBuilder {
@Value("${promoConfig.prefix.length}")
private Integer prefixLength;
public void validateRequestAndSetDefaults(PromoRequest promoRequest) {
prefixAndPostFixControlAccordingToLength(promoRequest);
}
private void prefixAndPostFixControlAccordingToLength(PromoRequest promoRequest) {
if (promoRequest.getPostfix() != null) {
int lengthControl = prefixLength + promoRequest.getPostfix().length();
if (lengthControl >= promoRequest.getLength()) {
throw new BadRequestException(Constant.ClientConstants.THE_SUM_OF_PREFIX_AND_POSTFIX_CAN_NOT_BE_GREATER_THAN_LENGHT);
}
}
}
}
下面是我的yml配置;
#========= Promo Config ========== #
promoConfig:
prefix:
length: 3
下面是我的服务;
public void validateRequest(PromoRequest promoRequest) {
codeConfigBuilder.validateRequestAndSetDefaults(promoRequest);
}
我创建了一个 PropertySourceResolver 类
@Component
@Getter
public class PropertySourceResolver {
private int prefixLength = 3;
下面还有我的测试课;
@RunWith(MockitoJUnitRunner.class)
class CodeConfigBuilderTest {
@MockBean
private PropertySourceResolver propertySourceResolver = new PropertySourceResolver();
@InjectMocks
private PromoRequest promoRequest = new PromoRequest();
@InjectMocks
private PromoService Service;
@Before
public void init() {
promoRequest.setPrefix("ABC");
promoRequest.setPostfix("ABCDABCD");
promoRequest.setQuantity(10);
promoRequest.setLength(12);
promoRequest.setCharset("ABCDEF");
}
@Test
public void prefixAndPostFixControl_accordingToLength_for_Succeed() {
int lengthControl = promoRequest.getPrefix().length() + promoRequest.getPostfix().length();
if (lengthControl >= promoRequest.getLength()) {
Assert.assertTrue(false);
}
}
我喜欢根据测试场景更改我的代码,例如;当......然后返回任何想法?谢谢。
【问题讨论】:
-
到底是什么问题?有什么事情没有按照您的预期工作?
-
我喜欢更改我的代码: (当...).thenReturn()
-
CodeConfigBuilder是一个简单的服务,为什么你认为你需要 mockito 来测试它?创建一个有效的PromoRequest并将其传递给validateRequestAndSetDefaults,它不应该抛出。然后创建一个无效的PromoRequest,validateRequestAndSetDefaults会抛出。使用构造函数注入来简化CodeConfigBuilder的创建 -
所以您希望prefixLength 可以在您的测试中即时调整,对吗?
-
@lesika 你介意写一下怎么做吗谢谢
标签: java spring-boot testing junit mockito