如何使用国家/地区代码验证电话号码以进行单元测试

时间:2014-07-29 15:32:30

标签: unit-testing

如何使用不同格式的国家/地区代码验证电话号码。我正在使用有效的phonenumber lengh mehod,并在此使用正则表达式进行电话号码验证,如

public bool IsValidPhoneNumberLength(string phoneNumber)
    {
        bool isValidPhone = false;
        string pattern = @"^[01]?[- .]?(\([2-9]\d{2}\)|[2-9]\d{2})[- .]?\d{3}[- .]?\d{4}$";
        Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
        bool result = isValidPhone = regex.IsMatch(phoneNumber);
        return result;
    }

我的单元测试用例如下所述

Assert.AreEqual(true, company1.IsValidPhoneNumberLength("2345678900"));
        Assert.AreEqual(true, company1.IsValidPhoneNumberLength("0019885021320"));
        Assert.AreEqual(true, company1.IsValidPhoneNumberLength("(212)897-0067"));
        Assert.AreEqual(true, company1.IsValidPhoneNumberLength("1(212)897-0067"));
        Assert.AreEqual(true, company1.IsValidPhoneNumberLength("001(212)897-0067"));
        Assert.AreEqual(true, company1.IsValidPhoneNumberLength("001.212.897.0067"));
        Assert.AreEqual(true, company1.IsValidPhoneNumberLength("001(212)897.00671234"));
        Assert.AreEqual(true, company1.IsValidPhoneNumberLength("001 212 897 0067"));

单元测试失败,测试方法中提到的一些条件。

1 个答案:

答案 0 :(得分:0)

据我所知,此代码存在两个问题:

  1. 您正在使用regexp来验证复杂的输入字符串。正则表达式很强大但它有它的极限。因此,通过使用regexp 解析输入到字段中然后验证字段(内容,长度等),您可能会更好。

    此外,有时最好忽略任何你不理解的角色,而不是试图说“如果它在这里和这里,那就好了。”因此,如果您只是从输入中删除了非数字的任何内容,然后只检查了长度,那么任务将变得更加简单(对客户来说更加愉快)。

    剥离会将数千个案例合并为一个。

  2. 您在单元测试中执行多个断言。这真是太糟了。如果多个断言失败,您将只看到第一个断言。其他的可以为您提供有关上次更改可能出错的重要信息。