在不久的将来,我们将在工作中转向 TDD 风格的开发,所以我正在尝试 VS 2013 附带的 VS 单元测试(这是我们在工作中使用的)。我正在尝试使用 TDD 编写一个可以找到 Kaprekar 常量的类。我正处于开发的某个阶段,我有一个提交有效数字的测试,我希望有一个包含一个元素的列表返回。该元素将由一个 3 元胞数组组成。这三个单元格将包含原始数字、一个数字按降序排列的数字和一个数字按升序排列的数字。我的调试代码显示我得到了预期的结果,但单元测试说我没有。我需要做什么才能让单元测试看到预期和实际结果相等?这是我的代码的删节版。
单元测试代码:
namespace KaprekarsConstantTest
{
[TestClass]
public class UnitTest1
{
private Kaprekar k;
[TestInitialize]
public void Init()
{
k = new Kaprekar();
}
[TestMethod]
public void FirstRow()
{
int[] row = new int[3];
row[0] = 5324;
row[1] = 5423;
row[2] = 2345;
List<int[]> expected = new List<int[]>();
expected.Add(row);
List<int[]> actual = k.Generate(5324);
int[] rslt = actual[0];
int[] expct = expected[0];
CollectionAssert.AreEqual(expected, actual,
"\nExpect: " + expct[0].ToString() + "; " + expct[1].ToString() + "; " + expct[2].ToString() +
"\nActual: " + rslt[0].ToString() + "; " + rslt[1].ToString() + "; " + rslt[2].ToString() + "\n");
}
}
}
应用代码
namespace KaprekarsConstant
{
public class Kaprekar
{
public List<int[]> Generate(params int[] orgNum)
{
List<int[]> rtnVal = new List<int[]>();
int num = orgNum[0];
string digits = num.ToString();
int[] row = new int[3];
row[0] = num;
List<int> lstDigits = new List<int>();
string snglNum = String.Empty;
for (int ndx = 0; ndx < 4; ndx++)
{
snglNum = digits[ndx].ToString();
lstDigits.Add(int.Parse(snglNum));
}
测试结果
测试名称: FirstRow
测试全名: KaprekarsConstantTest.UnitTest1.FirstRow
测试源:* ...\Projects\C_Sharp\KaprekarsConstant\KaprekarsConstantTest\UnitTest1.cs :第 51 行
测试结果: 失败
测试时间: 0:00:00.0033773
结果消息: CollectionAssert.AreEqual 失败。
预计:5324;5423; 2345
实际:5324;5432; 2345
(索引 0 处的元素不匹配。)
结果 StackTrace: 在 KaprekarsConstantTest.UnitTest1.FirstRow() in …\Projects\C_Sharp\KaprekarsConstant\KaprekarsConstantTest\UnitTest1.cs:line 61
慕仙森
相关分类