繁体   English   中英

C#单元测试类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM