Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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,因此,我正试图了解如何编写可测试代码,并正在为.srt(subtitles)播放器玩一个项目 我有一个类播放器,它有属性frames和sourcePath 我有一个loadFrames()方法,通常我会编写这个方法来打开在sourcePath中找到的文件,解析它,并相应地填充框架 然而,我希望能够测试这一点。我希望避免调用文件系统——我希望能够在测试中定义sourcePath中“文件”的内容 我的方法是让loadFrames方法接受IFileLoader类型的参数,该参数具有方法字符串[]Get

因此,我正试图了解如何编写可测试代码,并正在为.srt(subtitles)播放器玩一个项目

我有一个类播放器,它有属性frames和sourcePath

我有一个loadFrames()方法,通常我会编写这个方法来打开在sourcePath中找到的文件,解析它,并相应地填充框架

然而,我希望能够测试这一点。我希望避免调用文件系统——我希望能够在测试中定义sourcePath中“文件”的内容

我的方法是让loadFrames方法接受IFileLoader类型的参数,该参数具有方法字符串[]GetSourceText(String source)

生产中使用的实际文件加载器将解析在源位置找到的文件。在我的测试中,我使用了一个FakeFileLoader,它返回我为它的contents属性设置的值

所以-我的问题是-我做得好吗。这感觉不像我通常编写代码的方式。编写可测试代码显然与我习惯的感觉有所不同,虽然这已经满足了我当前的要求,能够指定源代码的内容,但我想知道我所采用的方式是否合乎逻辑。有没有更好、更明智的方法来实现同样的结果

非常感谢所有的帮助和见解


另外,我没有使用任何模拟框架等,只是简单的代码。我实际上是在用C语言编写代码,我从来没有这样做过(通常是Java),但我肯定认为这是一个一般性的测试问题,而不是特定于任何一种语言。

到目前为止,还不错。如果您的测试保持简洁和有用,就没有必要选择模拟框架


除此之外,“正确的”测试驱动编程,IMO,以这样一种方式工作:从有价值的期望开始,以实际的、完全可测试的代码结束。或者简单地说,从外到内工作。相反,“错误”是以不明确的期望开始,以许多不必要的、脆弱的、有缺陷的代码结束。

如果方法
loadFrames()
最初没有参数,那么最好避免添加参数。而是创建一个返回类型为
IFileLoader
的对象的工厂方法,并使用该工厂方法而不是参数

然后为测试创建一个子类
Player
,比如
TestPlayer
,它返回测试
IFileLoader

我还建议使用模拟框架


听起来像是在给遗留代码添加测试。如果是这样的话,我建议读一本书《有效地使用遗留代码》,这本书讨论了如何在现有代码中添加测试。

我不是在使用遗留代码——这是一个个人项目——我希望获得的非常小,很大一部分是提高我对可测试代码的理解。到目前为止,很少有代码编写。