如何在Java中编写验证10位数字电话号码的JUnit测试
实现仅允许纯数字的电话号码测试用例(Java)
1. 给实体类添加校验逻辑
在TelephoneNumber的setExtensionNum方法中加入纯数字校验,从源头拦截非法输入:
public class TelephoneNumber { private String extensionNum; public void setExtensionNum(String extensionNum) { // 若允许空值,可去掉extensionNum != null判断 if (extensionNum != null && !extensionNum.matches("\\d+")) { throw new IllegalArgumentException("分机号必须为纯数字"); } this.extensionNum = extensionNum; } public String getExtensionNum() { return extensionNum; } }
2. 编写高效的测试用例
用JUnit 5的参数化测试替代硬编码大串字符,把各类非法输入分类列举,测试逻辑更清晰易维护:
import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import static org.junit.jupiter.api.Assertions.*; class TelephoneNumberTest { // 覆盖所有非法输入场景 @ParameterizedTest @ValueSource(strings = { "!@#$%^&*()_-+=}]{[|;:'<,>./?", // 特殊字符 "qwertyuioplkjhgfdsazxcvbnm", // 小写字母 "àrèhìpòtù", // 带重音字符 "123abc", // 数字+字母混合 "12.34", // 带小数点 "" // 空字符串(若不允许可保留) }) void setExtensionNum_InvalidInput_ThrowsException(String invalidInput) { TelephoneNumber telephoneNumber = new TelephoneNumber(); assertThrows(IllegalArgumentException.class, () -> telephoneNumber.setExtensionNum(invalidInput)); } // 测试合法纯数字输入 @ParameterizedTest @ValueSource(strings = {"12345", "0", "9876543210"}) void setExtensionNum_ValidInput_SetsSuccessfully(String validInput) { TelephoneNumber telephoneNumber = new TelephoneNumber(); telephoneNumber.setExtensionNum(validInput); assertEquals(validInput, telephoneNumber.getExtensionNum()); } }
3. 可选方案:仅在测试阶段校验
如果不想修改实体类,也可以直接在测试用例中验证输入合法性:
import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertTrue; class TelephoneNumberTest { @Test void extensionNum_ShouldBeNumeric() { TelephoneNumber telephoneNumber = new TelephoneNumber(); telephoneNumber.setExtensionNum("12345"); assertTrue(telephoneNumber.getExtensionNum().matches("\\d+"), "分机号必须为纯数字"); } }
内容的提问来源于stack exchange,提问作者mayank bhardwaj
相关产品推荐
相关产品推荐

