我很擅长测试,并试图在我当前的项目中“正确”地做到这一点。大多数函数非常简单,但是我坚持使用大多数调用其他类/函数的类/函数,如果我应该测试它们。
比如说我有一个包含这两个函数的类:
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(),但这真的能给我什么吗?
答案 0 :(得分:0)
你想测试一下这个功能是否符合你的期望'。而你所期望的并不是某些其他功能被调用。您期望的是,在给定某些输入的情况下,会出现某些输出。
考虑String
(可能应该称之为LoadObject
)。它读取文件并解析它。所以你想测试如果给它一个已知文件会发生什么:它是否按预期解析它?
您应该单独测试ParseFile
知道如何解析一组合法的行,Parse
正确地将文件转换为行。您可以在特定的单元测试中非常彻底地处理这两种功能的边缘情况。但是,出于此类的目的,您只需要测试聚合是否正常工作。
单元测试问的问题是:假设我的依赖项已正确实现,这个特定的功能单元是否会正常运行?因此,存在一个ReadAllLines
,它返回一个静态字符串或抛出异常或真实fileService.ReadAllLines
展示的任何其他类别的行为。存根ReadAllLines
,它返回一个静态数据结构,或者将这些行与预期输入进行比较。
这个功能并不深刻。它不应该进行大量的测试来完全锻炼。