我应该如何测试代码?

这是我所知道的一个困难而开放的问题,但我想我会把它放在地板上,看看是否有人有任何有趣的建议。

我开发了一个代码生成器,它将我们的Python接口添加到我们的C ++代码中(通过SWIG生成),并生成将其作为WebServices公开的代码。 当我开发这个代码时,我使用TDD做了它,但是我发现我的测试很脆弱。 因为每个测试本质上都想验证给定的输入代码位(这恰好是一个C ++头文件),我会得到一个给定的输出代码位,我写了一个小引擎,它从XML输入文件读取测试定义并生成测试来自这些期望的案例。

问题是我害怕修改代码。 这一点以及单元测试自己的事实是:复杂的,而b:脆弱的。

所以我试图想出解决这个问题的其他方法,这让我觉得我可能会以错误的方式解决问题。 也许我需要更多地关注结果,IE:我生成的代码实际上是否运行并按照我想要的来执行,而不是代码是否按照我希望的方式运行。

有没有人有过类似的东西,他们会喜欢分享的经验?


我开始使用自己的代码生成器撰写我的经验总结,然后返回并重新阅读您的问题,发现您已经自己触及相同的问题,专注于执行结果而不是代码布局/外观。

问题是,这很难测试,生成的代码可能不适合在单元测试系统的环境中实际运行,并且如何对预期结果进行编码?

我发现你需要将代码生成器分解成更小的部分并进行单元测试。 如果你问我,单元测试完整的代码生成器更像集成测试,而不是单元测试。


回想一下,“单元测试”只是一种测试。 你应该能够单元测试代码生成器的内部部分。 你真正在看的是系统级测试(又名回归测试)。 这不仅仅是语义学......有不同的思维方式,方法,期望等等。这当然是更多的工作,但是你可能需要咬紧牙关,建立一个端到端的回归测试套件:固定的C ++文件 - > SWIG接口 - > python模块 - >已知的输出。 你真的想检查已知的输入(固定的C ++代码)与期望的输出(来自最终的Python程序)。 直接检查代码生成器结果就像差异目标文件一样...


是的,结果是唯一重要的事情。 真正的琐事是编写一个框架,允许您生成的代码独立运行......在那里度过您的时间。

链接地址: http://www.djcxy.com/p/50799.html

上一篇: How should I unit test a code

下一篇: Await a Async Void method call for unit testing