我编写了一个系统,根据导入的列表检查服务器的数据。 系统工作正常,我通过创建一个Actor类并为每个输入对调用start而不是在forloop中一次执行一个,成功地将它更改为与Actors一起使用。
我需要这个程序作为适当的JUnit集成测试来运行某些系统并报告数据。
我的代码就像:
@RunWith(value = classOf[Parameterized])
class MigrationDataTest (hostUser: Tuple2[String, Node]) {
val host = hostUser._1
val user = hostUser._2
@Test
def dataTest = {
val actor = new MigrationDataActor(host, user).start()
}
}
}
object MigrationDataTest {
........
........
@Parameters
def parameters: Collection[Array[Tuple2[String,Node]]] = {
val list = new ArrayList[Array[Tuple2[String,Node]]]()
hostList.foreach( { host =>
getUsers(host).foreach({ user =>
list.add(Array(Tuple2(host, user)))
})
})
return list
}
}
我丢失了代码(dataActor已被省略),但它总是通过所有600个测试,并且不会完全运行.started Actor对象。 actor对象定义了一个'def act()= {}'方法,它永远不会通过Smack库中的connection.connect()调用
如果我调用.act(而不是.start()),每个测试都会运行procedurley并正确传递或失败。
我已经搜索过高低,看不出为什么这不会失败。我假设它与控制退出的JUnit线程有关,并导致其他人退出,但我不完全确定。我不能相信没有人想过这样的测试并行化。
如果没有人知道答案是规格或其他框架中有什么东西可以从参数生成对象然后并行运行每个测试(在scala actor线程大小),我看了但是可能有错误的名字并且只是用糟糕的google-fu错过了他们。
非常感谢提前。