방금 이런 상황이 발생했습니다.
내 원자로에 대해 실패한 테스트를 추가하고 싶습니다. 반응기가 끝나지 않습니다. (먼저 실패해야합니다). 그러나 나는 그 시험이 영원히 계속되기를 원하지 않는다.
나는 당신의 연결을 따라 갔지만 그곳에는 여전히 기쁨이 없습니다. 그래서 저는 C++ 14 기능 중 일부를 사용하기로 결정했으며 상대적으로 간단합니다.
하지만이 같은 타임 아웃 구현 : 지금은 내 실패 테스트 나 테스트를 해결 코드를 작성할 수 있습니다을 가지고
TEST(Init, run)
{
// Step 1 Set up my code to run.
ThorsAnvil::Async::Reactor reactor;
std::unique_ptr<ThorsAnvil::Async::Handler> 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.
}
합니다.
[테스트 코드 냄새] (http://xunitpatterns.com/Slow%20Tests.html)를 도입하고 테스트를 취약하게 만들 수 있습니다. 정말로 그것을하고 싶다면 assertion 매크로를 위해 자신의 assertion 매크로 –
을 작성할 수 있습니다. 아마도 두 개의 쓰레드가 실행되어야할까요? 자식 스레드가 함수를 실행하고 시간 제한에 의해 반환되지 않으면 주 스레드가 중지되고 false 또는 뭔가를 반환합니다. – Basanta
토론은 구현 토론으로 이어지는 것으로 보입니다. if와 whens가 많이 있기 때문에 googletest 또는 다른 테스트 프레임 워크 문제에 대해 자세히 논의 할 것을 권합니다. 범위가 너무 넓습니다. 그렇습니다. 자식 스레드를 생성하면 도움이 될 수 있지만 강력한 지 여부는 말하기 어렵습니다. 통화가 끝날 때까지 기다렸다가 스톱워치를 사용하여 시간을 지정하십시오. –