我正在使用Java开发一个使用线程连续检索网站数据的应用程序。我想用Junit来测试它们,但这不是直截了当的。如何测试这些甚至没有终止点的线程?
答案 0 :(得分:4)
一种可能性是将线程所做的工作分解为可以在单线程单元测试中单独测试的辅助方法或类。
另一种方法是提供由线程调用的模拟对象,并可以检查是否发生了预期的行为。
另一个是生成工作线程,并让你的测试进行轮询,告诉它线程是否正常工作(最好是超时,这样你的测试不会永远运行。这里的问题是你的测试可以是缓慢且不可重复。
答案 1 :(得分:2)
为什么不使用jvisualvm(包含jdk 6及更高版本)来监控线程
http://docs.oracle.com/javase/6/docs/technotes/guides/visualvm/threads.html
答案 2 :(得分:1)
“测试它们”并不清楚你的意思。我很难看出你的主题是什么 - 功能有多少等等。经典的单元测试会测试你班级中的各个功能,每个功能都是独立的。但似乎这不是你想要的。我假设你想测试你的许多线程是否并行运行并且仍然做正确的事情。这种集成测试确实很难。
此处按顺序进行线程测试。您必须决定要模拟的环境的多少 - 在真实网站上运行测试。第一个可能不被运营商看好,后者可能会引入错误。我建议TestNG而不是JUnit,因为它很容易让你在任意数量的线程中并行运行测试。
答案 3 :(得分:0)
嗯,我认为这取决于你要测试的确切内容。
如果你只是想测试是否可以生成线程,那么这很愚蠢 - 它已经融入JVM,并且不会很快失败。 (如果你有一些特殊的资源条件,如低内存导致它失败,我想这是有道理的,但在大多数情况下,我会说不。)
我会将测试分为两个部分。进行一次只进行数据retreval的测试,无论它是否在自己的线程中。然后让你的“黑匣子”测试告诉你的核心组件“去获取这些数据” - 它会根据需要产生它的线程。