簡體   English   中英

單元測試集合

[英]Unit Test Collection

我有一個簡單的方法,該方法返回字母的數組。

public char[] GetLettersOfTheAlphabet() {
    char[] result = new char[26];
    int index = 0;

    for (int i = 65; i < 91; i++) {
        result[index] = Convert.ToChar(i);
        index += 1;
    }

    return result;
}

我試圖對代碼進行單元測試

[TestMethod()]
public void GetLettersOfTheAlphabetTest_Pass() {
    HomePage.Rules.BrokerAccess.TridionCategories target = new HomePage.Rules.BrokerAccess.TridionCategories();
    char[] expected = new char[] { char.Parse("A"), 
                                   char.Parse("B"),
                                   char.Parse("C"),
                                   char.Parse("D"),
                                   char.Parse("E"),
                                   char.Parse("F"),
                                   char.Parse("G"),
                                   char.Parse("H"),
                                   char.Parse("I"),
                                   char.Parse("J"),
                                   char.Parse("k"),
                                   char.Parse("L"),
                                   char.Parse("M"),
                                   char.Parse("N"),
                                   char.Parse("O"),
                                   char.Parse("P"),
                                   char.Parse("Q"),
                                   char.Parse("R"),
                                   char.Parse("S"),
                                   char.Parse("T"),
                                   char.Parse("U"),
                                   char.Parse("V"),
                                   char.Parse("W"),
                                   char.Parse("X"),
                                   char.Parse("Y"),
                                   char.Parse("Z")};
    char[] actual;
    actual = target.GetLettersOfTheAlphabet();
    Assert.AreEqual(expected, actual);
}

看來它歸結為數組使用的比較函數。 您如何處理這種情況?

如果使用的是.NET 3.5,則還可以使用SequenceEqual()

[TestMethod()]
public void GetLettersOfTheAlphabetTest_Pass() {
    var target = new HomePage.Rules.BrokerAccess.TridionCategories();
    var expected = new[] { 'A','B','C', ... };

    var actual = target.GetLettersOfTheAlphabet();
    Assert.IsTrue(expected.SequenceEqual(actual));
}

CollectionAssert.AreEquivalent(預期的,實際的)工作。

我不確定它是如何工作的,但是它確實可以滿足我的需求。 我認為它會檢查實際列中預期集合中每個項目中的每個項目,還會檢查它們是否具有相同的計數,但是順序無關緊要。

只需遍歷數組並比較每個項目。 每個數組中的索引4應該相同。

另一種方法是檢查結果數組是否包含說“ A”,“ G”,“ K”或隨機字母。

我從單元測試中學到的東西有時有時必須復制代碼或做更多的工作,因為這是測試的本質。 基本上,對於單元測試有效的方法對於生產站點可能是不可接受的。

您的K在預期數組中為小寫字母,但我相信代碼會生成大寫字符。 如果比較區分大小寫,則兩個數組不匹配時將導致失敗。

您還可以對數組中的值的大小和一些抽查進行測試。

Assert.AreEqual(預期長度,實際長度)

Assert.AreEqual(期望[0],實際[0])...。

首先:


Assert.AreEqual(expected.Length,actual.Length);

然后:


for(int i = 0; i < actual.Length; i++)
{

//Since you are testing whether the alphabet is correct, then is ok that the characters
//have different case.
  Assert.AreEqual(true,actual[i].toString().Equals(expected[i].toString(),StringComparison.OrdinalIgnoreCase));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM