这是一个我知道的难题和开放式问题,但我想我会把它扔到地板上,看看是否有人有任何有趣的建议.
我已经开发出一种码生成器,其将我们Python接口我们的C++代码(通过SWIG生成),并产生以暴露此作为Web服务所需的代码.当我开发这个代码时,我使用TDD做到了,但我发现我的测试很脆弱.因为每个测试基本上是想验证的输入给定码位(这恰好是一个C++头)我得到的输出给定码位我写了一个小引擎,从XML输入文件读取测试定义和生成测试来自这些期望的案例.
问题是我害怕进入修改代码.那个单元测试自己的事实是:复杂的,b:脆弱的.
因此,我正在尝试考虑解决这个问题的替代方法,并且让我感到震惊,我可能会以错误的方式解决它.也许我需要更多地关注结果,IE:我生成的代码实际运行并执行我想要的代码,而不是代码看起来像我想要的那样.
有没有人有任何类似于他们想要分享的东西的经历?
我开始用我自己的代码生成器编写我的经验总结,然后回过头来重新阅读你的问题,发现你自己已经触及了同样的问题,专注于执行结果而不是代码布局/外观.
问题是,这很难测试,生成的代码可能不适合在单元测试系统的环境中实际运行,以及如何编码预期的结果?
我发现你需要将代码生成器分解成更小的部分并对其进行单元测试.如果你问我,单元测试一个完整的代码生成器更像是集成测试,而不是单元测试.
回想一下,"单元测试"只是一种测试.您应该能够对代码生成器的内部部分进行单元测试.你在这里真正看到的是系统级测试(又名回归测试).这不仅仅是语义......有不同的思维模式,方法,期望等等.这肯定是更多的工作,但你可能需要咬紧牙关并建立一个端到端的回归测试套件:修复C++文件 - > SWIG接口 - > python模块 - >已知输出.你真的想根据预期的输出检查已知的输入(固定的C++代码)(最终的Python程序出来的).直接检查代码生成器结果就像区分对象文件一样......