我正在尝试使用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);
}
或者你会把每个人分成单独的单元测试吗?
答案 0 :(得分:2)
您可以添加数据行注释。
[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)
案例创建单独的方法
答案 1 :(得分:1)
为每个测试编写一个单独的单元测试方法,其含义为全名。 因此,当测试失败后,您很容易发现问题是什么。
您必须区分不同的测试和不同的测试参数。 一些断言会失败,因为密码由于某种原因变弱,有些 应该通过。
对于您确实需要不同参数的情况,可以使用DataSource
(请参阅http://msdn.microsoft.com/en-us/library/ms182527.aspx),您可以在其中添加外部源作为excel文件进行输入。
例如,您可以使用excel源测试传递密码。