繁体   English   中英

单元测试多个断言

[英]Unit testing multiple asserts

我正在尝试使用MSTest对C#中的方法进行单元测试。 我正在测试ChangePasswordAsync方法强制密码复杂性。 我的问题是我想用一系列参数测试这个方法。 目前我有一个单元测试,有多个断言来测试不同的参数,这是一个合理的解决方案吗?

我知道当我使用其他单元测试框架时,已经有方法来测试具有不同参数的方法。 我可以在方法上使用一个属性来实现这个目的吗? 我的示例单元测试如下:

    /// <summary>
    /// Ensures that a password must meet the password complexity of a digit and an alphanumeric, 8 digits long and one
    /// special character.
    /// </summary>
    [TestMethod]
    public void TestPasswordComplexity()
    {
        var result = _UserManager.ChangePasswordAsync(_TestUser.Id, "Password123!", "1!").Result; //Changes the password.

        Assert.IsFalse(result.Succeeded);

        result = _UserManager.ChangePasswordAsync(_TestUser.Id, "Password123!", "123456789").Result; //Changes the password.

        Assert.IsFalse(result.Succeeded);

        result = _UserManager.ChangePasswordAsync(_TestUser.Id, "Password123!", "123456789!").Result; //Changes the password.

        Assert.IsFalse(result.Succeeded);

        result = _UserManager.ChangePasswordAsync(_TestUser.Id, "Password123!", "abcdefghijk").Result; //Changes the password.

        Assert.IsFalse(result.Succeeded);

        result = _UserManager.ChangePasswordAsync(_TestUser.Id, "Password123!", "abcdefghijK1!").Result; //Changes the password.

        Assert.IsTrue(result.Succeeded);
    }  

或者你会把每个人分成单独的单元测试吗?

您可以添加数据行注释。

[TestMethod]
[DataRow ("1!")
[DataRow ("123456789")
[DataRow ("123456789!")
...
public void TestPasswordComplexity(string pass)
{
    var result = _UserManager.ChangePasswordAsync(_TestUser.Id, "Password123!", pass).Result; //Changes the password.

    Assert.IsFalse(result.Succeeded);
}

它将使用pass参数传递每个数据行来运行测试方法。

为第五个Assert.IsTrue(result.Succeeded)案例创建一个单独的方法

为每个测试编写一个单独的单元测试方法,其含义为全名。 因此,当测试失败后,您很容易发现问题所在。

您必须区分不同的测试和不同的测试参数。 你的一些断言会失败,因为密码由于某种原因变弱,有些应该通过。

对于您确实需要不同参数的情况,可以使用DataSource (请参阅http://msdn.microsoft.com/en-us/library/ms182527.aspx ),您可以在其中添加外部源作为excel文件输入。

例如,您可以使用excel源测试传递密码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM