【问题标题】:Unit testing a static C++ library using a higher level language?使用高级语言对静态 C++ 库进行单元测试?
【发布时间】:2019-03-19 05:05:44
【问题描述】:

我想以测试驱动的方式编写一些静态 C++ 库。

我开始四处寻找 C++ 单元测试框架,但后来我想知道为什么我需要用 C++ 编写测试代码。

应该可以从更容易编写测试的高级语言调用静态 C++ 库。

这是一个明智的想法吗?

是否有任何特定的语言使这变得特别简单?无论是 Python、Lua 还是其他?甚至可能是一个特殊的 DSL?

有什么好的教程提示吗?

【问题讨论】:

  • 最后,您是在要求库或工具推荐,不是吗。这使您的问题脱离了主题。即使不是,我认为您的要求过于宽泛/自以为是。话说回来;我认为您仍然希望在 C++ 中进行 一些 测试。你的用例“它应该是一个库”......然后你可以从其他语言/框架中使用......正在路上。当你做真正的 TDD 时,你从应该做 one 事情的函数开始。确保您可以从 python 脚本中调用该函数,这会增加相当多的复杂性。
  • 换句话说:当你的“第一个”测试是有一个尝试调用 C++ 代码的脚本时,我看不出你怎么能做真正的 TDD。
  • 最后:python/lua... 脚本将是一个很好的集成测试,但不适用于真正的单元测试和 tdd。
  • 我试图不把它作为工具推荐。我想要这个问题的更一般的答案。但是,是的,指向可以让我这样做的工具的指针会很有帮助。我不明白为什么不能对单个函数进行单元测试或用另一种语言进行 tdd 编写测试。只要编写某种集成包装器的成本不会太高。
  • 您问“是否有特定的语言可以做到这一点”。换句话说,“是否有工具可以做到这一点”。然后你问教程?!那是寻求建议,仅此而已。除此之外:你说你想要TDD。 TDD 源于小型、最少的测试,然后通过编写最少的生产代码来解决这些问题。如前所述:您的 C++ 产品代码和潜在脚本测试之间的差距太大了恕我直言。

标签: c++ unit-testing tdd


【解决方案1】:

使用某些语言绑定从其他语言测试您的 C++ 代码会对您的测试方式产生一些影响。

使用 C++ 编写的测试,您的测试代码将更接近真实的客户端代码。这意味着,所有 C++ 特定的编译时效果都将发生,例如宏扩展、参数的整数提升、重载解析、内联、模板实例化等。而且,这将针对您调用的用 C++ 编写的每个测试用例单独发生你的图书馆。

相比之下,当使用不同的语言进行测试时,您必须将 C++ 函数/方法等绑定到符号或其他语言的任何内容(可能中间有包装函数)。这些语言绑定的编译是所有上述编译时效果发生的唯一点。

使用不同语言的这些后果对您来说是否可以(或什至可取)取决于您的测试目标,因此您必须对其进行判断。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 2015-11-15
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    相关资源
    最近更新 更多