Time out for test cases in googletest

前端 未结 1 576
情话喂你
情话喂你 2020-12-30 13:44

Is there a way in gtest to have a timeout for inline/test cases or even tests. For example I would like to do something like: EXPECT_TIMEOUT(5 seconds, myFunction

1条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-12-30 14:16

    I just came across this situation.

    I wanted to add a failing test for my reactor. The reactor never finishes. (it has to fail first). But I don't want the test to run forever.

    I followed your link but still not joy there. So I decided to use some of the C++14 features and it makes it relatively simple.

    But I implemented the timeout like this:

    TEST(Init, run)
    {
        // Step 1 Set up my code to run.
        ThorsAnvil::Async::Reactor                      reactor;
        std::unique_ptr     handler(new TestHandler("test/data/input"));
        ThorsAnvil::Async::HandlerId                    id = reactor.registerHandler(std::move(handler));
    
        // Step 2
        // Run the code async.
        auto asyncFuture = std::async(
            std::launch::async, [&reactor]() {
                                   reactor.run();   // The TestHandler
                                                    // should call reactor.shutDown()
                                                    // when it is finished.
                                                    // if it does not then 
                                                    // the test failed.
                                });
    
        // Step 3
        // DO your timeout test.
        EXPECT_TRUE(asyncFuture.wait_for(std::chrono::milliseconds(5000)) != std::future_status::timeout);
    
        // Step 4
        // Clean up your resources.
        reactor.shutDown();             // this will allow run() to exit.
                                        // and the thread to die.
    }
    

    Now that I have my failing test I can write the code that fixes the test.

    0 讨论(0)
提交回复
热议问题