所以我正在处理一些对手动数据库操作很重的遗留代码。我试图在这里保持一些表面上的质量,所以我会尽可能多地使用 TDD。
我正在处理的代码需要填充,比方说List<Foo>
来自 DataReader,它返回正常运行的 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。