繁体   English   中英

在C#中进行单元测试怎么样?

[英]Unit testing in C# how to?

我是C#中单元测试领域的新手。

我在Main.cs有一段代码

public static string Generate(int length)
{
    char[] chars = "$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&".ToCharArray();
    string password = string.Empty;
    Random random = new Random();

    for (int i = 0; i < length; i++)
    {
        int x = random.Next(1, chars.Length);

        if (!password.Contains(chars.GetValue(x).ToString()))
            password += chars.GetValue(x);
        else
            i--;
    }
    return password;
}

现在我不知道如何用单元测试来测试这段代码可以有人给我举个例子吗?

编辑:

我做了一个测试代码

    [TestMethod]
    [Timeout(1000)]
    public void RenderingPasswordShouldHaveMaximumSize()
    {
        var amountOfCharacters = Int32.MaxValue;
        var generator = new PasswordGenerator();
        var target = generator.Generate(amountOfCharacters);

        // TODO
        Assert.Fail("This method should throw an exception if you try to create a password with too many characters");
    }

但是它给了我以下错误:消息:测试'RenderingPasswordShouldHaveMaximumSize'超出了执行超时时间,有人可以帮我这个需要最大尺寸为74!

一个使用NUnit的简单示例。 在这里我测试当我传递0作为参数时,什么都没有生成(也许你应该抛出Exception ?)

[TextFixture]
public class Tests {

    [Test]
    public void Test_Length0_ReturnsNothing() {
        string result = Generate(0);

        Assert.IsTrue(string.IsNullOrEmpty(result));
    }
}

您可以编写类似的测试(例如,确保它包含您想要的字符等)。

单元测试的想法是将一些东西放在你的小方法中,并检查结果是否正常。

Visual Studio有一个项目模板。 还有其他工具,如NUnit oderXUnit,用于C#中的测试

有一个伟大的复数课程

和鲍勃叔叔的网络直播,他演示了测试驱动的开发http://cleancoders.com/codecast/clean-code-episode-6-part-1/show

另请参见msdn上的“ 使用单元测试验证代码

单元测试有很多细微差别。 我建议你阅读关于单元测试的书“单元测试的艺术:在.Net中的例子”。

在单元测试中描述了许多技术和方法。 你也可以在这里找到很多例子。

var amountOfCharacters = Int32.MaxValue;
var generator = new PasswordGenerator();
var target = generator.Generate(amountOfCharacters);

您指定密码应包含的字符数为2,147,483,647个字符...

chars.Length

数组中只有74个可能的值。

毫无疑问它会超时,因为循环需要更长的时间来迭代22亿次尝试查找数组中的最后几个值。

for (int i = 0; i < length; i++)

您的逻辑也会发生变化,因为您没有指定密码的长度,而是您要执行的迭代次数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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