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));
    }

c#单元测试类

可能错误是由于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:假装你实际上是在打电话。