Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如何在没有任何逻辑的情况下对功能进行单元测试?_Unit Testing - Fatal编程技术网

Unit testing 如何在没有任何逻辑的情况下对功能进行单元测试?

Unit testing 如何在没有任何逻辑的情况下对功能进行单元测试?,unit-testing,Unit Testing,我对unt测试非常陌生,并试图在我当前的项目中“正确”地进行测试。大多数函数都非常简单,但我一直使用那些主要调用其他类/函数的类/函数,以及是否应该测试它们 例如,我有一个具有以下两个函数的类: public MyObject LoadObject(string path) { string[] lines = fileService.ReadAllLines(path); return myParser.Parse(lines); } public void SaveObje

我对unt测试非常陌生,并试图在我当前的项目中“正确”地进行测试。大多数函数都非常简单,但我一直使用那些主要调用其他类/函数的类/函数,以及是否应该测试它们

例如,我有一个具有以下两个函数的类:

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()和WriteAllines(),但这真的给了我什么吗

您希望测试“函数是否满足您的期望”。您所期望的不是调用某些其他函数。您所期望的是,给定某些输入,就会出现某些输出

考虑一下
LoadObject
(它可能应该被称为类似于
ParseFile
)。它读取一个文件并解析它。所以您要测试的是,如果您给它一个已知的文件,会发生什么:它是否按预期解析它

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

单元测试要问的问题是:假设我的依赖关系得到了正确的实现,那么这个特定的功能单元的行为是否正确?因此,去掉一个
fileService.ReadAllLines
,它返回一个静态字符串或抛出异常或实际
ReadAllLines
显示的任何其他行为类别。删除一个
myParser.Parse
,它返回一个静态数据结构或将行与预期输入进行比较


这一作用并不深刻。它不应该需要很多测试才能完全运行。

您需要测试“函数是否达到了预期效果”。您所期望的不是调用某些其他函数。您所期望的是,给定某些输入,就会出现某些输出

考虑一下
LoadObject
(它可能应该被称为类似于
ParseFile
)。它读取一个文件并解析它。所以您要测试的是,如果您给它一个已知的文件,会发生什么:它是否按预期解析它

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

单元测试要问的问题是:假设我的依赖关系得到了正确的实现,那么这个特定的功能单元的行为是否正确?因此,去掉一个
fileService.ReadAllLines
,它返回一个静态字符串或抛出异常或实际
ReadAllLines
显示的任何其他行为类别。删除一个
myParser.Parse
,它返回一个静态数据结构或将行与预期输入进行比较


这一作用并不深刻。它不应该需要大量的测试来充分发挥作用。

你不需要单元测试功能,你需要测试功能。这些课程做什么?根据它们的名字,我假设它们保存并加载对象。所以你需要编写一个测试来保存一些东西,然后加载它,并检查加载的数据是否正常。这只是一个例子,但我觉得它没有那么简单。当然,大部分工作都是由myConverter/myParser完成的,它们是单独测试的(所以这里不需要测试它们)。我的观点是,当我主要调用其他对象来做事情时,我应该测试什么,或者我应该测试它吗?我可以验证是否进行了调用(并且使用了正确的参数),我想知道人们在这些情况下通常是这样做的,或者他们是否只是跳过测试它们(除了以后的集成测试),您不需要单元测试函数,而是测试功能。这些课程做什么?根据它们的名字,我假设它们保存并加载对象。所以你需要编写一个测试来保存一些东西,然后加载它,并检查加载的数据是否正常。这只是一个例子,但我觉得它没有那么简单。当然,大部分工作都是由myConverter/myParser完成的,它们是单独测试的(所以这里不需要测试它们)。我的观点是,当我主要调用其他对象来做事情时,我应该测试什么,或者我应该测试它吗?我可以验证是否进行了调用(并且使用了正确的参数),我想知道人们在这些情况下通常是这样做的,还是他们只是跳过测试(除了以后的集成测试)是的,名称非常糟糕(只是编造出来的)。但我喜欢你的答案,并将尝试在我的代码中这样做,谢谢!是的,名字很糟糕(只是编造出来的)。但我喜欢你的答案,并将尝试在我的代码中这样做,谢谢!