您好,我正在努力按照下面的方法撰寫模擬測驗;
我的代碼如下;
@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);
}
}
我喜歡根據測驗場景更改我的代碼,例如;什么時候......然后回傳任何想法?謝謝你。
uj5u.com熱心網友回復:
為了使這更簡單并更好地組織您的代碼,請通過創建以下類來抽象化注入配置的復雜性:
@ConfigurationProperties(prefix = "promoConfig.prefix")
public class PromoPrefixConfiguration {
private Integer length;
public Integer getLength() {
return length;
}
}
然后,您應該將其作為以下項的依賴項CodeConfigBuilder:
@Component
public class CodeConfigBuilder {
private Integer prefixLength;
public CodeConfigBuilder(PromoPrefixConfiguration promoPrefixConfiguration) {
this.prefixLength = promoPrefixConfiguration.getLength();
}
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);
}
}
}
}
現在,為了測驗這個類,你必須通過三個測驗來完成:
- 測驗
PromoRequest有效,因為它postfix為空; - 測驗
PromoRequest有效,因為長度有效; PromoRequest由于長度無效而無效的測驗;
它們將類似于以下內容:
class CodeConfigBuilderTest {
private PromoPrefixConfiguration promoPrefixConfiguration = new PromoPrefixConfiguration(10);
private CodeConfigBuilder codeConfigBuilder = new CodeConfigBuilder(promoPrefixConfiguration);
@Test
public void promoRequestIsValidGivenNullPostfix() {
// Arrange
PromoRequest promoRequest = new PromoRequest();
promoRequest.setPostfix(null);
// Act
codeConfigBuilder.validateRequestAndSetDefaults(promoRequest);
}
@Test
public void promoRequestIsValidGivenValidPrefixPlusPostfixLength() {
// Arrange
PromoRequest promoRequest = new PromoRequest();
promoRequest.setPostfix("ABCD");
promoRequest.setLength(15);
// Act
codeConfigBuilder.validateRequestAndSetDefaults(promoRequest);
}
@Test(expected = BadRequestException.class)
public void promoRequestIsInvalidGivenInvalidPrefixPlusPostfixLength() {
// Arrange
PromoRequest promoRequest = new PromoRequest();
promoRequest.setPostfix("ABCDEFGH");
promoRequest.setLength(15);
// Act
codeConfigBuilder.validateRequestAndSetDefaults(promoRequest);
}
}
如果您使用的是 JUnit 5,您可以用以下測驗替換最后一個測驗,以輕松斷言例外訊息:
@Test
public void promoRequestIsInvalidGivenInvalidPrefixPlusPostfixLength() {
// Arrange
PromoRequest promoRequest = new PromoRequest();
promoRequest.setPrefix("ABCDEFG");
promoRequest.setPostfix("HIJKLMN");
// Act
Exception exception = assertThrows(BadRequestException.class, () -> {
codeConfigBuilder.validateRequestAndSetDefaults(promoRequest);
});
// Assert
String exceptionMessage = exception.getMessage();
assertTrue(exceptionMessage.equals(Constant.ClientConstants.THE_SUM_OF_PREFIX_AND_POSTFIX_CAN_NOT_BE_GREATER_THAN_LENGHT));
}
PS:你的意思是suffix而不是postfix?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/360607.html
