下图显示了我目前正在进行的集成测试。
1。http://i44.tinypic.com/n1atk4.png
让我感到困惑的是:
Assert.AreEqual(0/*57*/, auditRecord.Table_Final_Row_Count);
/* 57 */
是应该实际存在的值(刚刚注释掉)。
下图是数据库中的结果:
2。http://i39.tinypic.com/117foyx.png
更多信息: 我正在将数百行代码转换为linq2sql。未转换的代码具有/ 57 /作为结果应该是正确的。当我尝试添加57时,它给出了一个错误,说明预期(57)实际(0)。现在我知道0不正确..这可能是我的代码。我该如何解决这个问题?
P.S。零成功通过......
答案 0 :(得分:2)
你的测试很脆弱。您将从数据库返回第一个元素,而不返回谓词或订单子句。当您使用SELECT TOP(1)
时,无法保证SQL Server将返回相同的行。可能之前的测试运行返回该列的值为57。您应该更改FirstOrDefault()调用。
var auditRecord = auditRecords.FirstOrDefault(row => row.Id == someId);
或者:
var auditRecord = auditRecords..OrderBy(row => row.SomeColumn).FirstOrDefault();