You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 11:22:16