【发布时间】:2010-09-06 23:55:06
【问题描述】:
所以我正在处理一些对手动数据库操作很繁重的遗留代码。我试图在这里保持一些表面上的质量,所以我会尽可能地使用 TDD。
我正在处理的代码需要填充,比如说来自 DataReader 的 List<Foo>,它返回正常运行的 Foo 所需的所有字段。但是,如果我想验证代码实际上是否为每个数据库行返回一个列表项,我正在编写如下所示的测试代码:
Expect.Call(reader.Read()).Return(true);
Expect.Call(reader["foo_id"]).Return((long) 1);
// ....
Expect.Call(reader.Read()).Return(true);
Expect.Call(reader["foo_id"]).Return((long) 2);
// ....
Expect.Call(reader.Read()).Return(false);
这也相当乏味且很容易损坏。
我应该如何处理这个问题,这样结果才不会是一大堆脆弱的测试?
顺便说一句,我目前正在为此使用 Rhino.Mocks,但如果结果足够令人信服,我可以更改它。只要替代品不是 TypeMock,因为他们的 EULA 对我上次检查的口味来说有点太吓人了。
编辑:我目前也仅限于 C# 2。
【问题讨论】:
标签: c# unit-testing tdd mocking