c#单元测试类
本文关键字:测试类 单元测试 单元 | 更新日期: 2023-09-27 18:03:38
我正在用类库进行单元测试,我被困在如何测试方法上。我需要测试一些场景,比如检查少于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 }
我会这样写你的代码。如果密码不为空且不以空格和8个或更多字符开头
public static bool CheckPassword(string pwd)
{
return pwd != null && !pwd.StartsWith(" ") && pwd.Length >= 8;
}
我建议使用AAA原则,即:
A:安排在哪里初始化需要调用要测试的方法
A:假装你实际上是在打电话。