代码之家  ›  专栏  ›  技术社区  ›  E Rolnicki

单元测试、重构、IO

  •  2
  • E Rolnicki  · 技术社区  · 17 年前

    InterestingResult result = foo.Bar(irrelevant, filePathInfo);
    

    string dataInFile = foo.GetDataInFile(filePathInfo);
    InterestingResult result = foo.Bar(irrelevant, dataInFile);
    

    你疯了吗?…还是这是件好事?

    5 回复  |  直到 17 年前
        1
  •  6
  •   driAn    17 年前

    使用流作为参数怎么样?这样你就可以通过考试了 MemoryStream 在单元测试中 FileStream 在生产代码中。

        2
  •  0
  •   mouviciel    17 年前

        3
  •  0
  •   Nick    17 年前

    我可能会设计接口,这样我就可以传入一个IStream(或类似的)指针,而不是采用文件路径。通过这种方式,您可以使用模拟库进行测试,以通过满足该方法的模拟IStream,并提供更强的测试。

        4
  •  0
  •   Gishu    17 年前

    • 对于您的测试,请提供(只读) golden file 您知道其预期输出。(将其存储在Test/Resources中)。如果速度足够快,则无需更改生产代码。
    • 如果对文件系统的测试速度慢得让人无法忍受(任何超过半秒的测试),则抽象出文件系统访问(使用模拟/伪操作)(类似于您问题中的第二个片段)。

        5
  •  0
  •   Tim Cooper    14 年前

    这取决于你问谁。有人会说设计是为了测试。我不会仅仅为了适应测试而改变我的设计。

    更改我的设计,使Foo方法采用流而不是文件路径。这样,它更灵活,您的单元测试只需通过一个虚拟流即可。