[英]C# unit testing a class
我正在使用类库进行单元测试,并且坚持如何测试方法。 我需要测试以下情况,例如检查是否不能接受少于8个字符的密码,检查是否可以接受8个或更多字符的密码以及是否不能接受前面带有空格的密码。
下面的代码来自类库。
public class PasswordChecker
{
public bool CheckPassword(string pwd)
{
if (pwd.Length >= 8 && !pwd.StartsWith(""))
{
return true;
}
else
{
return false;
}
下面的代码来自测试项目。
[TestClass]
public class PasswordCheckerTest
{
[TestMethod]
public void CheckPassword8CharsLong()
{
string validPassword = "12345678";
string invalidPassword = "abc";
PasswordChecker checker = new PasswordChecker();
Assert.IsTrue(checker.CheckPassword(validPassword));
Assert.IsFalse(checker.CheckPassword(invalidPassword));
}
错误可能是由于pwd.StartsWith("")
语句引起的,但是从您的测试来看,一种测试方法中的测试太多,应将其分为3种方法,
[TestMethod]
public void GivenValidPassword_WhenCheckPassword_ThenReturnTrue(){
var password= "12345678";
var sut = new PasswordChecker();
var result = sut.CheckPassword(password);
Assert.IsTrue(result );
}
[TestMethod]
public void GivenPasswordLessThan8Characters_WhenCheckPassword_ThenReturnFalse(){
var password= "1278";
var sut = new PasswordChecker();
var result = sut.CheckPassword(password);
Assert.IsFalse(result );
}
[TestMethod]
public void GivenPasswordStartWithSpace_WhenCheckPassword_ThenReturnFalse(){
var password= " 12345678";
var sut = new PasswordChecker();
var result = sut.CheckPassword(password);
Assert.IsFalse(result );
}
您不应该在一项测试中测试这两个条件。 另外,您可以将CheckPassword方法设为静态,因为它没有副作用。
[TestClass]
public class PasswordCheckerTests
{
[TestMethod]
public void CheckPassword_PasswordLessThanEightCharacters_ReturnsFalse()
{
string invalidPassword = "1234567";
PasswordChecker checker = new PasswordChecker();
Assert.IsFalse(checker.CheckPassword(invalidPassword));
}
[TestMethod]
public void CheckPassword_PasswordLongerThanSevenCharacters_ReturnsTrue()
{
string validPassword= "12345678";
PasswordChecker checker = new PasswordChecker();
Assert.IsTrue(checker.CheckPassword(validPassword));
}
}
if(pwd.Length < 8 || pwd.Contains(" ") == true ){ //VALID }
我会这样写你的代码。 如果密码不为null,并且不以空格和8个字符或更多字符开头
public static bool CheckPassword(string pwd)
{
return pwd != null && !pwd.StartsWith(" ") && pwd.Length >= 8;
}
我会说使用AAA原理,即:
答:安排在什么地方初始化调用要测试的方法所需的内容。
答:在实际拨打电话的地方采取行动。
答:断言在哪里断言您已经达到了预期。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.