gpt4 book ai didi

scala - 在 Specs2 中使用 Akka TestKit

转载 作者:行者123 更新时间:2023-12-04 14:59:25 26 4
gpt4 key购买 nike

我正在尝试使用 Akka 的 TestKit 制作 specs2 测试。我被一个持续的编译错误困住了,我不知道如何解决,我很感激建议。

编译错误是:

TaskSpec.scala:40: parents of traits may not have parameters
[error] with akka.testkit.TestKit( ActorSystem( "testsystem", ConfigFactory.parseString( TaskSpec.config ) ) )

以下建议来自 Akka docs和互联网 xebia和 Akka in Action,我正在尝试将 TestKit 合并到 specs2 Scope 中。这是我收到错误的代码片段:
class TaskSpec 
extends Specification
with AsyncTest
with NoTimeConversions {

sequential

trait scope
extends Scope
with TestKit( ActorSystem( "testsystem", ConfigFactory.parseString( TaskSpec.config ) ) )
with AkkaTestSupport {
...

我有以下 helper :
trait AkkaTestSupport extends After { outer: TestKit =>
override protected def after: Unit = {
system.shutdown()
super.after
}
}

最佳答案

这是您可以做的一件事:

import org.specs2.mutable.SpecificationLike
import org.specs2.specification._

class TestSpec extends Actors { isolated
"test1" >> ok
"test2" >> ok
}

abstract class Actors extends
TestKit(ActorSystem("testsystem", ConfigFactory.parseString(TaskSpec.config)))
with SpecificationLike with AfterExample {

override def map(fs: =>Fragments) = super.map(fs) ^ step(system.shutdown, global = true)

def after = system.shutdown
}

这应该可以避免您遇到的编译错误,因为 TestKit是一个抽象类,它只是混合特征: SpecificationLike是一个特征( Specification 不是)和 AfterExample是一种特质。

上述规范也在 isolated 中运行模式,意味着有一个全新的 TestSpec为每个示例实例化的对象和 AfterExample trait 确保系统在每个示例后关闭。

最后是 map方法被一个特殊的 step 覆盖确保 system为第一个 TestSpec 创建实例(声明所有示例的那个)将被干净地处理掉。

关于scala - 在 Specs2 中使用 Akka TestKit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19916410/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com