我刚开始接受测试驱动的开发,但我很喜欢它。然而,有一个主要问题使我无法有效地使用它。
我工作的嵌入式医疗应用程序,普通C,与安全问题。
假设您有一个模块A,它有一个我想测试的函数A_function()。该函数调用一个函数B_function,在模块B中实现。我希望将模块解耦,因此,正如James所教的,我创建了一个模拟模块B,该模块实现了B_function的模拟版本。
然而,总有一天,我必须用真正版本的B实现模块B_function。当然,这两个B_function不能生活在同一个可执行文件中,所以我不知道如何有一个唯一的“启动程序”来测试两个模块。
James的出路是在模块A中用一个函数指针替换对B_function的调用,该函数指针可以根据需要具有模拟或实际函数的值。然而,我在一个团队中工作,我无法证明这个决定是没有意义的,如果不是为了测试,也没有人要求我明确地使用测试驱动的方法。
也许唯一的出路是为每个模块生成不同的可执行文件。
有更聪明的解决方案吗?谢谢
发布于 2012-09-03 00:22:02
基于您所描述的,我认为这是使用函数指针的一个可怕的原因。它将提高您调试、分析核心转储的能力,并将使未来的开发/维护复杂化。函数指针有它们的位置,但这不是其中之一。
我想你是从错误的角度来测试的。A_func依赖于B_func的存在才能运行。因此,如果没有B的实际实现,就无法真正测试A。安装一个模拟B_func只会为A_func生成一组有限的测试。根据定义,如果没有真正的A_func,您就不能完全使用B_func。
假设您没有处理模块包含的级联系列,那么适当的测试套件将有一些测试来执行B_func,然后还有一些额外的测试来执行A_func可以通过的变体。可以理解,在B_func的测试和来自A_func的B_func的间接测试之间可能存在一些冗余,但这通常并不是什么大问题。
https://softwareengineering.stackexchange.com/questions/163360
复制相似问题