单元测试多个断言
本文关键字:断言 单元测试 | 更新日期: 2023-09-27 18:26:47
我正在尝试使用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源测试传递密码。