代码之家  ›  专栏  ›  技术社区  ›  Rytmis

如何测试从数据阅读器填充列表的方法?

  •  5
  • Rytmis  · 技术社区  · 16 年前

    因此,我正在研究一些对手动数据库操作很重要的遗留代码。我想在这里保持一些质量的外表,所以我要尽可能多地使用TDD。

    我正在处理的代码需要填充,比如 List<Foo> 从返回正常运行的foo所需的所有字段的DataReader。但是,如果我想验证代码实际上每一个数据库行返回一个列表项,那么我编写的测试代码如下所示:

    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);
    

    这是相当乏味,相当容易打破,太。

    我应该如何处理这个问题,以便结果不会是一大堆脆弱的测试?

    顺便说一句,我现在使用的是犀牛。对此我进行了模拟,但如果结果足够令人信服,我可以更改它。只要备选方案不是模仿排字,因为他们的EULA对我上次检查的口味来说有点可怕。

    编辑:我目前也被限制在C 2。

    6 回复  |  直到 16 年前
        1
  •  1
  •   Dale Ragan    16 年前

        2
  •  1
  •   Dale Ragan    16 年前
        3
  •  0
  •   kokos    16 年前

    var arrFoos = new Foos[]{...}; // what you expect
    var expectedFoos = new List<Foo>(arrFoos); // make a list from the hardcoded array of expected Foos
    var readerResult = ReadEntireList(reader); // read everything from reader and put in List<Foo>
    Expect.ContainSameFoos(expectedFoos, readerResult); // compare the two lists
    
        4
  •  0
  •   Rytmis    16 年前

        5
  •  0
  •   Community Ian Goodfellow    7 年前
        6
  •  0
  •   Rytmis    16 年前