【问题标题】:C/C++ testing framework (like JUnit for java) [closed]C/C++ 测试框架(如 JUnit for java)[关闭]
【发布时间】:2009-07-01 04:10:50
【问题描述】:

之前我一直在碰壁,因为我在使用 c/c++ 时没有做任何测试类(而是有很多打印方法)。

在 c/c++ 代码中执行测试最常用的方法是什么? Java 的 JUnit 只在调试时给我留下了美好的回忆。

我知道在带有已定义调试头的代码中使用断言应该可以工作,但是没有更好的方法吗?

而且由于我打算将来制作测试课程,欢迎任何有用的提示。

【问题讨论】:

    标签: c++ c testing


    【解决方案1】:

    我们使用Google Test 和它的伴侣Google Mock。效果很好,支持 JUnit 风格的 XML 输出,以便与 CruiseControl 等轻松集成。它也是完全跨平台的,根据我几个月前的研究,GMock 是唯一完全跨平台的 C++ 对象模拟框架.

    【讨论】:

    • Google Test 和 Google Mock 合并(因为现在答案有点过时了)。 :)
    【解决方案2】:

    我们使用boost.Test。还有cppunit

    【讨论】:

      【解决方案3】:

      【讨论】:

      • gamesfromwithin 的第一个链接包含了我需要了解的有关不同框架的所有信息(至少目前是这样)。谢谢。
      • 请记住,gamesfromwithin.com 的文章虽然很棒,但写于 2004 年,从那时起情况发生了变化。
      • 对于 UnitTest++,请访问 github.com/unittest-cpp/unittest-cpp。其他所有内容都已过时。
      【解决方案4】:

      UnitTest++ 值得一看。与此处提到的其他一些框架相比,它缺少一些功能,但简单性很好——尤其是在您刚刚开始的时候。

      我相信它是由 Noel Llopis 在写完http://gamesfromwithin.com/?p=29 中提到的文章后开发的。移植到多种不同的编译器/平台非常容易——如果需要针对 PC 以外的东西,无论是游戏机、嵌入式设备还是其他东西,这都很有用。

      邮件列表已经安静了一段时间了,但每隔一段时间就会有问题、补丁和/或新版本,而且提出问题的人通常会很快得到答复。

      【讨论】:

      • 第二。我已经为 C++ 尝试了一些单元测试框架,而 UnitTest++ 在我看来无疑是最好的。你说得对,它是由 Noel Llopis 开发的。见gamesfromwithin.com/?p=51
      【解决方案5】:

      维基百科有一长串C++ 的单元测试框架和另一个C 的列表。

      【讨论】:

        【解决方案6】:

        我在 Windows 和 Linux 下使用Qt,它提供了一个自己的集成(但与其他单独的解决方案相比有点受限)测试框架。

        它非常易于使用和快速学习 - 请参阅 QTestLib

        乔, 克里斯

        【讨论】:

          【解决方案7】:

          无耻插件:如果您面向 Windows 并使用 Visual Studio,请查看 cfixcfix studio

          它也兼容 WinUnit。

          【讨论】:

            【解决方案8】:

            最新版本的 Visual Studio 有一些东西:

            http://msdn.microsoft.com/en-us/library/ms243147(VS.80).aspx

            【讨论】:

              【解决方案9】:

              为什么不使用CppUnit?它是作为 JUnit 的一个端口创建的。

              【讨论】:

                【解决方案10】:

                人们严重过度设计的另一个问题。

                以下是名义上的单元测试基础架构的粗略、非工作实现。使用 std::string 命名空间/类名构造 Test 并使用一致的命名方案来打印出哪个测试失败是有意义的。我只是使用一个单元测试模板,并有一些脚本可以找到以u 开头的所有可执行文件(每个类一个),依次运行它们并收集返回值。

                struct Test
                {
                   std::vector<(std::string)fptr*(void)> tests;
                   int run() const
                   {
                      int stat(0);
                      for (/* tests */)
                      {
                         std::string const res(test.run());
                         if (!res.empty())
                         {
                             std::cerr << res;
                             ++stat;
                         }
                      }
                      return stat;
                   }
                };
                
                std::string test1()
                {
                   std::ostringstream oss;
                // do a bunch of stuff
                // mark some of this code to be pulled into the class documentation 
                
                   // conditional checks follow
                   if (fail)
                   {
                      oss << "fail: some reason" << std::endl;
                   }
                // more checks
                   return oss.str();
                }
                
                int main(void)
                {
                   Tests tests;
                   tests.push_back(test1);
                   tests.push_back(test2);
                   return tests.run();
                }
                

                【讨论】:

                • 嗯,是的。但一个好的单元测试框架的作用远不止于此。
                • 像把你所有的目标文件耦合在一起并强迫你拉入另一个库?
                【解决方案11】:

                对于 Symbian,有 SymbianOSUnit:http://www.symbianosunit.co.uk/

                【讨论】:

                  【解决方案12】:

                  如果您使用的是 Windows,请查看:Limitations of using C++/CLI with NUnit 并在 http://en.wikipedia.org/wiki/Managed_Extensions_for_C%2B%2B 中编写测试。

                  还有:http://golios.blogspot.com/2008/12/using-nunit-with-c-part-2.htmlhttp://golios.blogspot.com/2008/11/using-nunit-with-native-c.html

                  这将像 junit 一样工作只是,除了 nunit 在运行每个测试之前不会创建测试用例类的新实例。

                  【讨论】:

                    【解决方案13】:

                    如果是 Windows 平台,您可以从这里尝试 MS 的 WinUnit。 Simplified Unit Testing for Native C++ Application

                    【讨论】:

                      【解决方案14】:

                      尝试使用 Catch。 http://catch-lib.net

                      它易于使用和设置,并且对大多数人来说足够强大。

                      【讨论】:

                        【解决方案15】:

                        2019 年:

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 2012-12-25
                          • 2011-02-14
                          • 1970-01-01
                          • 1970-01-01
                          • 2010-09-19
                          • 1970-01-01
                          • 2010-10-18
                          • 2011-03-25
                          相关资源
                          最近更新 更多