如何在没有任何逻辑的情况下对功能进

时间:2015-11-08 08:54:59

标签: unit-testing

我很擅长测试,并试图在我当前的项目中“正确”地做到这一点。大多数函数非常简单,但是我坚持使用大多数调用其他类/函数的类/函数,如果我应该测试它们。

比如说我有一个包含这两个函数的类:

public MyObject LoadObject(string path)
{
    string[] lines = fileService.ReadAllLines(path);
    return myParser.Parse(lines);
}

public void SaveObject(MyObject, string path)
{
    string[] lines = myConverter.Convert(MyObject);
    fileService.WriteAllLines(path, lines);
}

我想我可以模拟myConverter,myParser和fileService,然后检查是否已经调用了Convert(),Parse(),ReadAllLines()和WriteAllLines(),但这真的能给我什么吗?

1 个答案:

答案 0 :(得分:0)

你想测试一下这个功能是否符合你的期望'。而你所期望的并不是某些其他功能被调用。您期望的是,在给定某些输入的情况下,会出现某些输出。

考虑String(可能应该称之为LoadObject)。它读取文件并解析它。所以你想测试如果给它一个已知文件会发生什么:它是否按预期解析它?

您应该单独测试ParseFile知道如何解析一组合法的行,Parse正确地将文件转换为行。您可以在特定的单元测试中非常彻底地处理这两种功能的边缘情况。但是,出于此类的目的,您只需要测试聚合是否正常工作。

单元测试问的问题是:假设我的依赖项已正确实现,这个特定的功能单元是否会正常运行?因此,存在一个ReadAllLines,它返回一个静态字符串或抛出异常或真实fileService.ReadAllLines展示的任何其他类别的行为。存根ReadAllLines,它返回一个静态数据结构,或者将这些行与预期输入进行比较。

这个功能并不深刻。它不应该进行大量的测试来完全锻炼。