首先让我拿出我的测试结构:TestNG的平行试验失败
- 有BaseTest含有运行
@BeforeSuite
一个setUp()
方法(单身)。此设置()方法初始化为MyObject其被声明为:
protected static ThreadLocal<MyObject> myObject= new ThreadLocal<MyObject>();
所有其他的测试扩展这个BaseTest。 例如说CustomerTest
这CustomerTest有 -
- 与
@BeforeClass
标签的测试 - 它得到的MyObject的存储的实例。 - 其他测试将使用MyObject的,执行某些操作并做测试
- 与
@AfterClass
标签的测试 - 不破坏为MyObject
- 与
实例因此理想情况下,这种设置()方法应该运行在任何其他测试之前。它只运行一次。
我想在TestNG框架中并行运行测试用例。为了实现这一目标,我已经设置的testng.xml的suite
标签并行属性作为
<suite name="Suite" parallel="classes" thread-count="5">
,在几秒钟内后,我火构建,构建得到失败,所有的基本测试失败,其他被跳过。
测试失败是由于java.lang.NullPointerException
我的理解是,在安装程序()方法被一个线程中运行,在不同的线程一些其他的测试正在试图访问还未被初始化为MyObject。失败也是如此。我的理解是否正确?
如果是,那么可能的解决方案是什么?
我可以做些什么 - 让线程先运行setUp(),然后不要让其他线程调用。一旦对setUp()的调用完成/返回,则允许其他线程调用。
(注:我的项目使用Maven的)
1)关于NullPointerExceptions - 我跟踪了他们,并指示我得出相同的结论。他们没有得到MyObject的实例 2)不可以。它只能运行一次。更新了问题以确保不再有混淆。 – 2011-04-12 18:07:41