我有一个简单的方法,它返回字母表中的字母数组。
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);
}
似乎它归结为数组使用的比较函数。你是如何处理这种情况的?
答案 0 :(得分:4)
如果您使用的是.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));
}
答案 1 :(得分:4)
CollectionAssert.AreEquivalent(预期,实际)有效。
我不确定它是如何工作的,但它确实能满足我的需求。我认为它检查实际列中预期集合exsits中每个项目中的每个项目,它还检查它们是否相同,但顺序无关紧要。
答案 2 :(得分:2)
只需遍历数组并比较每个项目。每个数组中的索引4应该相同。
另一种方法是检查结果数组是否包含'A','G','K'或随机字母。
我从单元测试中学到的东西有时候你需要复制代码或做更多工作,因为这是测试的本质。对于生产站点来说,单元测试的基本功能可能是不可接受的。
答案 3 :(得分:0)
您的K在预期数组中是小写的,但我相信代码会生成大写字符。如果比较区分大小写,则当两个数组不匹配时会导致失败。
答案 4 :(得分:0)
您还可以对数组中的值的大小和一些抽查进行测试....
Assert.AreEqual(expected.Length,actual.Length)
Assert.AreEqual(期望[0],实际[0]) ....
答案 5 :(得分: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));
}