我想使用Google Test测试一个Server.AcceptRequest
方法的行为:
class Server {
public:
// Clients can call this method, want to test that it works
Result AcceptRequest(const Request& request) {
queue_.Add(request);
... blocks waiting for result ...
return result;
}
private:
// Executed by the background_thread_;
void ProcessRequestsInQueue() {
while (true) {
Process(queue_.PopEarliest());
}
}
MySynchronizedQueue queue_;
std::thread background_thread_ = thread([this] {ProcessRequestsInQueue();});
};
该方法接受客户端请求,将其排队,阻塞等待结果,并在结果可用时返回结果。
当后台线程处理来自队列的相应请求时,结果就可用了。
我有一个测试,如下所示:
TEST(ServerTest, TwoRequests) {
Server server;
Result r1 = server.AcceptClientRequest(request1);
Result r2 = server.AcceptClientRequest(request2);
ASSERT_EQ(r1, correctResultFor1);
ASSERT_EQ(r2, correctResultFor2);
}
由于实现Server
类涉及多个线程,因此此测试可能在一次尝试中通过,但在另一次尝试中失败。为了增加捕获错误的机会,我运行多次测试:
TEST_P(ListenerTest, TwoRequests) {
... same as before ...
}
INSTANTIATE_TEST_CASE_P(Instantiation, ServerTest, Range(0, 100));
但现在make test
命令将每个参数化实例视为单独的测试,在日志中,我看到了100个测试:
Test 1: Instantiation/ServerTest.TwoRequests/1
Test 2: Instantiation/ServerTest.TwoRequests/2
...
Test 100: Instantiation/ServerTest.TwoRequests/100
鉴于我不使用参数值,是否有一种重写测试代码的方法,使得make test
命令记录执行了100次单个测试,而不是100个测试?