在Visual Studio中查看Google测试结果

时间:2011-03-01 13:05:25

标签: visual-studio googletest

有没有办法在Visual Studio中查看Google测试结果?如果是,怎么样?
我正在使用Google Test 1.5.0和Visual Studio 2010

到目前为止,我一直在命令行中使用Google Test 我已经在其他IDE上看到了这样的集成(eclipse ......)但在VS中还没有

6 个答案:

答案 0 :(得分:7)

看看GoogleTestAddin - 我认为这就是你想要的 引自CodePlex描述:

  

GoogleTestAddin是Visual Studio 2008和2010的加载项。

     

通过选择它们,可以更轻松地执行/调试googletest函数。

     

您不再需要将测试应用程序的命令参数设置为仅执行指定的函数或测试。

     

googletest输出被重定向到Visual Studio输出窗口。   在失败的测试中,您可以通过双击错误消息轻松跳转到代码。

答案 1 :(得分:7)

有一种非常简单的方法可以将googletest的输出并行用于单元测试。

简而言之,您可以创建自己的Printer类,直接将结果输出到VisualStudio的输出窗口。这种方式似乎比其他方式更灵活,因为您可以控制结果的内容(格式,详细信息等)和目的地。您可以在main()功能中正确执行此操作。您可以一次使用多个打印机。您可以通过在失败的测试中双击错误消息来跳转到代码。

以下是执行此操作的步骤:

  1. 创建一个派生自::testing::EmptyTestEventListener的类 类。
  2. 覆盖必要的功能。使用OutputDebugString() 功能而不是printf()
  3. RUN_ALL_TESTS()调用之前,创建一个类的实例并将其链接到gtest的侦听器列表。
  4. 您的打印机类可能如下所示:

    // Provides alternative output mode which produces minimal amount of
    // information about tests.
    class TersePrinter : public EmptyTestEventListener {
      void outDebugStringA (const char *format, ...)
      {
            va_list args;
            va_start( args, format );
            int len = _vscprintf( format, args ) + 1;
            char *str = new char[len * sizeof(char)];
            vsprintf(str, format, args );
            OutputDebugStringA(str);
            delete [] str;
      }
    
      // Called after all test activities have ended.
      virtual void OnTestProgramEnd(const UnitTest& unit_test) {
        outDebugStringA("TEST %s\n", unit_test.Passed() ? "PASSED" : "FAILED");
      }
    
      // Called before a test starts.
      virtual void OnTestStart(const TestInfo& test_info) {
        outDebugStringA(
                "*** Test %s.%s starting.\n",
                test_info.test_case_name(),
                test_info.name());
      }
    
      // Called after a failed assertion or a SUCCEED() invocation.
      virtual void OnTestPartResult(const TestPartResult& test_part_result) {
        outDebugStringA(
                "%s in %s:%d\n%s\n",
                test_part_result.failed() ? "*** Failure" : "Success",
                test_part_result.file_name(),
                test_part_result.line_number(),
                test_part_result.summary());
      }
    
      // Called after a test ends.
      virtual void OnTestEnd(const TestInfo& test_info) {
        outDebugStringA(
                "*** Test %s.%s ending.\n",
                test_info.test_case_name(),
                test_info.name());
      }
    };  // class TersePrinter
    

    将打印机链接到侦听器列表:

    UnitTest& unit_test = *UnitTest::GetInstance();
    TestEventListeners& listeners = unit_test.listeners();
    listeners.Append(new TersePrinter);
    

    该方法在sample #9the Googletest samples中进行了描述。

答案 2 :(得分:5)

您可以使用构建后事件。这是一个指南:
http://leefw.wordpress.com/2010/11/17/google-test-gtest-setup-with-microsoft-visual-studio-2008-c/

您还可以在Visual Studio的“工具”菜单中配置“外部工具”,并使用它来运行项目的目标路径。 (提示:创建工具栏菜单项以便于调用)

答案 3 :(得分:5)

对于Visual Studio 2012,还有一个扩展,在Visual Studio中为Google Test提供测试适配器(因此与Visual Studios Test Explorer集成): Google Test Adapter

答案 4 :(得分:1)

使用提供的功能丰富的 Google测试适配器 on GitHubthrough the VS gallery(或通过VS的 Extensions 菜单)。它目前支持VS2013和VS2015,VS2012支持即将推出。

免责声明:我是该扩展程序的作者之一。

答案 5 :(得分:0)

对Visual Studio 2013使用GoogleTest RunnerauthorGoogle Test Adapter甚至推荐它作为更好的选择。