配置gtest仅在控制台中显示失败的测试

Yua*_*uan 13 c++ windows googletest

是否有选项只显示失败的测试?我不得不切换到使用吉他来实现这一点,但我想念命令行工具.

Ell*_*nce 8

I ran into the same issue - as I'm sure many other people have. So I created this:

https://gist.github.com/elliotchance/8215283

Should be pretty much paste and play.


Sim*_*mon 6

现在有一个内置的解决方案:

your_test_binary --gtest_brief=1
Run Code Online (Sandbox Code Playgroud)

另请参阅文档。还有 GTEST_BRIEF 环境变量来配置它。


Jen*_*ich 5

有两种方法可以实现这一目标.

第一个是编写自己的事件监听器:

https://github.com/google/googletest/blob/master/googletest/docs/advanced.md#defining-event-listeners

另一种方法是过滤googletest事件监听器收到的输入.

对于此方法,您将删除当前事件侦听器并将其与您自己的事件进行交换

testing::TestEventListeners& listeners = testing::UnitTest::GetInstance()->listeners();
testing::TestEventListener* listener = listeners.Release(listeners.default_result_printer());
listeners.Append(new FailurePrinter(listener));
Run Code Online (Sandbox Code Playgroud)

其中FailurePrinter是您自己的事件侦听器类.

这个类应该是这样的

class FailurePrinter : public ::testing::TestEventListener {

public:
FailurePrinter(TestEventListener* listener) : TestEventListener() {_listener = listener;}

virtual void OnTestProgramStart(const UnitTest& unit_test);
virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration);
virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test);
virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test);
virtual void OnTestCaseStart(const TestCase& test_case);
virtual void OnTestStart(const TestInfo& test_info);
virtual void OnTestPartResult(const TestPartResult& result);
virtual void OnTestEnd(const TestInfo& test_info);
virtual void OnTestCaseEnd(const TestCase& test_case);
virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test);
virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test);
virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration);
virtual void OnTestProgramEnd(const UnitTest& unit_test);

protected:
testing::TestEventListener* _listener;
};
Run Code Online (Sandbox Code Playgroud)

现在你必须实现所有方法.

如果你喜欢googles事件监听器打印东西的方式,只需将调用委托给_listener.

或者您可以修改结果.例如:

void FailurePrinter::OnTestPartResult(const TestPartResult& test_part_result)
{
  if (test_part_result.failed())
  {
      _listener->OnTestPartResult(test_part_result);
      printf("\n");
  }
}
Run Code Online (Sandbox Code Playgroud)

只会打印Testfailures.


psu*_*sur -1

根据文档,您可以使用测试事件更改输出。看这里(还有一个例子):https://github.com/google/googletest/blob/master/googletest/docs/advanced.md#extending-googletest-by-handling-test-events