首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Akka路由TestKit与Kotlin Spek

使用Akka路由TestKit与Kotlin Spek
EN

Stack Overflow用户
提问于 2018-07-16 12:10:30
回答 1查看 417关注 0票数 0

我正在尝试使用测试我的AkkaHTTP路由(用Kotlin编写)。在我们的项目测试使用Spek和我想保持这种方式。

路由TestKit教程给出了一个Java示例:

代码语言:javascript
复制
public class TestkitExampleTest extends JUnitRouteTest {
    TestRoute appRoute = testRoute(new MyAppService().createRoute())

    @Test
    public void testCalculatorAdd() {
        // test happy path
        appRoute.run(HttpRequest.GET("/calculator/add?x=4.2&y=2.3"))
            .assertStatusCode(200)
            .assertEntity("x + y = 6.5")

        // test responses to potential errors
        appRoute.run(HttpRequest.GET("/calculator/add?x=3.2"))
            .assertStatusCode(StatusCodes.NOT_FOUND) // 404
            .assertEntity("Request is missing required query parameter 'y'")

        // test responses to potential errors
        appRoute.run(HttpRequest.GET("/calculator/add?x=3.2&y=three"))
            .assertStatusCode(StatusCodes.BAD_REQUEST)
            .assertEntity("The query parameter 'y' was malformed:\n" +
                "'three' is not a valid 64-bit floating point value")
    }
}

设置使用testRoute函数,这意味着测试类必须扩展JUnitRouteTest

在试图翻译成Kotlin Spek测试时,我得到了以下信息:

代码语言:javascript
复制
class TestKitExampleTest : JUnitRouteTest(), Spek({

  describe("My routes") {
    val appRoute = testRoute(MyAppService().createRoute())

    it("calculator add") {
      // test happy path
      appRoute.run(HttpRequest.GET("/calculator/add?x=4.2&y=2.3"))
        .assertStatusCode(200)
        .assertEntity("x + y = 6.5")
      //...rest omitted
    }
  }
})

当类试图继承两个类时,它不会编译。我将其转换为以下内容:

代码语言:javascript
复制
class TestKitExampleTest : Spek({

  describe("My routes") {
    val appRoute = testRoute(MyAppService().createRoute())

    it("calculator add") {
      // test happy path
      appRoute.run(HttpRequest.GET("/calculator/add?x=4.2&y=2.3"))
        .assertStatusCode(200)
        .assertEntity("x + y = 6.5")
      //...rest omitted
    }
  }
}) {
  companion object : JUnitRouteTest()
}

其中包含运行时错误java.lang.IllegalStateException: Unknown factory null at akka.http.impl.util.package$.actorSystem(package.scala:34)

有没有办法使用Akka的路由测试工具包与Spek?还是有其他方法来测试这些路线?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-17 15:39:09

如上文所述的@raniejade,在Github上回答。JUnitRouteTest用规则引导Akka,但是Spek的LifeCycleListener可以做同样的事情。

添加代码:

代码语言:javascript
复制
class SpekRouteBootstrapper: LifecycleListener, JUnitRouteTest() {
  override fun beforeExecuteTest(test: TestScope) {
    systemResource().before()
  }

  override fun afterExecuteTest(test: TestScope) {
    systemResource().after()
  }
} 

允许我在测试课上这样做:

代码语言:javascript
复制
class TestKitExampleTest: Spek({
  val bootstrapper = SpekRouteBootstrapper()
  registerListener(bootstrapper)

  describe("My routes") {
    val appRoute by memoized {
      bootstrapper.testRoute(MyAppService().createRoute())
    }

    it("calculator add") {
      // test happy path
      appRoute.run(HttpRequest.GET("/calculator/add?x=4.2&y=2.3"))
        .assertStatusCode(200)
        .assertEntity("x + y = 6.5")
    }
  }
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51361539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档