【问题标题】:Don't know what I'm doing wrong in my Unit Test不知道我在单元测试中做错了什么
【发布时间】:2015-05-24 10:54:20
【问题描述】:

我的 LoginSystem 有一个单元测试,但它失败了,我不知道为什么,在我看来,我认为我的代码是正确的,它似乎在过去几周内工作,我只是通过单元测试。

public bool matchCheck(string Username, string Password)
        {
            //create a new bool and set it to false.
            bool returnvar = false;

            //for each basemember in the list of members.
            foreach (BaseMember bm in hillracing.Members)
            {
                //if the username is equal to a list item username AND the password is also equal.
                if (Username == bm.userName && Password == bm.passWord)
                {
                    //they exist within the same object, so return true.
                    returnvar = true;
                }
                else
                {
                    throw new Exception(" Did not match!");
                }
            }

            //return this bool, true or false.
            return returnvar;
        }

谁能告诉我为什么总是抛出我的异常?谢谢。

【问题讨论】:

    标签: c# unit-testing


    【解决方案1】:

    您将一个用户名和密码与整个用户名和密码集合进行比较。根据定义,整个集合中只有一项应评估为true,其余项目应评估为false。在您的情况下,您在第一次评估为 false 时抛出异常。

    【讨论】:

    • 已修复,抱歉,我太愚蠢了,每次循环它都会抛出异常,如果它没有找到它(它显然不会每次都找到匹配集,所以它有抛出异常的概率为 100%)换句话说,它只会找到它正在寻找 1:100 次的匹配数据集,并且此代码将使它在第一次不成功的匹配时抛出异常,无论数据集是否确实被找到了。
    【解决方案2】:

    顺便说一句,cmets 喜欢这样的:

    //创建一个新的布尔值并将其设置为false。

    bool returnvar = false;

    应该避免,因为代码会自己说话。无用的 cmets 不会给代码增加任何价值,反而会产生负面影响。

    【讨论】:

    • 我和任何人一样都知道代码 cmets 非常明显,我正在为完全不懂代码的人制作 cmets,如果由我决定,我就不会我的程序中这个级别的 cmets。
    【解决方案3】:

    如果您希望改进例程,则考虑在找到匹配项时返回 true,如果到达循环末尾,则返回 false 或抛出异常。我个人的偏好是避免抛出异常,除非它实际上是异常。

    【讨论】:

    • "如果你想改进常规,那么考虑在找到匹配项时返回 true" 这不是我做的吗?我喜欢抛出异常,因为它让我必须在我的代码中正确验证它们,但我同意,有些情况下不需要它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 2012-08-09
    • 2012-05-19
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    相关资源
    最近更新 更多