簡體   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