为什么我的断言失败了? (抛出异常)

时间:2014-01-05 23:16:18

标签: c# asp.net-mvc testing

我在我的代码中使用测试,根据我的理解,所有需要在方法中运行的测试都是:

private ClassName(Argument)
{
    return;
}

那么测试实际检查的是方法/测试结束时“Argument”是否是正确的输出。

然而在我的情况下,传入的参数与输出无关。因此我不确定如何测试它。

注意:代码本身是健全的,它会输出正确的变量。此外,我实际上在代码之后编写了测试(Big booboo,我知道。我想养成经常测试的习惯。)

编辑:我认为问题与通过LoginView.CloseLoginView.Menu.SetMenuView退出的测试有关。 (该功能在此行结束,测试无法完成?)

return;的位置也会影响代码的其余部分,因此它需要位于代码的末尾。如果我将其移动,其余代码将无法访问,程序会中断。

我已经找到了尝试绕过异常的方法,而我所提出的只是测试异常实际上正在被抛出。 有没有办法绕过测试中的异常?

以下是测试:

public void Compare_LoginTest()
{
    User_LoginView LoginView = new User_LoginView();
    User_Controller.screenName = "ben";
    User_Controller.screenPwd = "password";
    User_Controller.Compare_Login(LoginView);
    int actual = User_Controller.screenAccess;
    int expected = 1;
    Assert.AreEqual(expected, actual);
}

以下是正在测试的方法:

    public static  void Compare_Login(User_LoginView LoginView)
    {
        // Creates a new oject of User_Model and populates it from the User_Controller.
        User_Model AccessModel = new User_Model();
        AccessModel.Name = screenName;
        AccessModel.Pwd = screenPwd;

        // Runs the Login Comparsion in the Database_Facade, and passes in the Model.
        Database_Facade Database = new Database_Facade();
        Database.GetLoginAccess(AccessModel);
        screenAccess = AccessModel.AccessLevel;
        Menu_View.accessLevelSet = AccessModel.AccessLevel;

        // Compares the returned AccessLevel. 
        // if it is corect; closes the Login and runs the SetMenuView method,
        // if it is incorrect; shows an error.
        if (AccessModel.AccessLevel > 0)
        {
            Console.WriteLine("Access Level " + AccessModel.AccessLevel);
            // Exception Thrown in testing.
            LoginView.Close();
            LoginView.Menu.SetMenuView();
        }
        else
        {
            ErrorCodes_Controller LoginError = new ErrorCodes_Controller();
            LoginError.WrongLoginError();
        }
        return;
    }

1 个答案:

答案 0 :(得分:0)

我不明白你在问什么...如果静态UserController.screenAccess变量为1,测试将通过 - 看起来Compare_Login方法总是将其设置为1。 / p>

这一切看起来都很好,所以如果你的测试失败了,那么就会阻止代码达到这一点。

对于大多数单元测试框架(我猜你只是使用内置的微软一个?),例外是单元测试方法如何通过或失败 - 如果断言不是Assert.Xyz方法抛出异常没错,否则他们没有。您的代码可能抛出的任何其他异常也算作失败。 如果没有任何

,测试框架会捕获任何异常并将测试标记为已通过

我猜想Check_Login函数中或Compare_Login函数中较早的函数会抛出异常。这是我能看到的唯一会导致单元测试失败的东西。然而,我很惊讶您没有注意到这样的异常(尝试点击失败的单元测试,看看您可以看到有关失败的详细信息)