单元测试Java线程

时间:2018-07-12 04:53:29

标签: java unit-testing junit

我有一个主程序,该程序创建一个Thread做某事。

工作线程调用长时间运行的服务并使用某种方式 回调函数以通知其响应。

if (($request->content) == null) {
    $request->request->add(['content' => $request->other_content]);
}

我在为此用例创建JUnit测试用例时遇到问题。 您知道如何为该课程进行单元测试吗?

我实际上想模拟我的回答,但我不知道该怎么做。 在我的单元测试中,我不想实际调用ConfigService类。

2 个答案:

答案 0 :(得分:0)

如果我理解正确,那么您想测试请求是否得到响应。那响应就是您希望看到的正确性吗?
我认为您的问题是Thread对您的代码运行syncrone,并且测试用例将在响应到达之前结束。 只要侦听器线程处于活动状态,就可以将代码保存在JUnit案例中。

为此,您可以使用:

Thread t = new WorkerThread();
t.join();

Thread.join();只要线程t处于活动状态,就可以防止执行下面的代码。因此它将阻塞代码,并在收到响应后继续执行。

答案 1 :(得分:0)

您应该了解有关Mockito或EasyMock之类的模拟库的信息。这提供了一种注入ConfigService实例的方法,该实例将返回一个可以测试的已知响应。

请注意,如果您希望线程同时运行,则应调用workerThread.start()而不是workerThread.run()