繁体   English   中英

ScalaTest AsyncFunSuiteLike 多个断言

[英]ScalaTest AsyncFunSuiteLike multiple asserts

我正在重写用于测试以 String 响应的 Akka actor 的测试,现在,我们使用一个返回Future[String]的函数。 所以使用 AsyncFunSuiteLike 重写测试。

目前我正在研究一个必须断言多个 Futures 的测试,但我似乎不明白如何使用 AsyncFunSuiteLike 来实现它。

我的测试如下:

test("Error responses") {

    NanoHTTPD.Response.Status.values().filter(status => status.getRequestStatus >= 400).map {
      status => {
        val statusCode = status.getRequestStatus
        httpService.setStatusCode(status)
        val responseBody = s"Request failed with status $status"
        httpService.setResponseContent(responseBody)
        val errorMessage = s"Error response (${status.getRequestStatus}): $responseBody"

        myobject.request("123456").map {
          resp => assert(resp === "....")
        }
      }
    }

}

但我收到错误type missmatch. Expected: Future[Assertion] actual: List[Future[scalatest.Assertion]] type missmatch. Expected: Future[Assertion] actual: List[Future[scalatest.Assertion]]

关于如何在这样的单个测试中实现多个断言的任何想法?

ScalaTest异步测试期望测试主体返回Future[Assertion] 现在你的测试体返回List[Future[Assertion]]]因为

NanoHTTPD.Response.Status.values() ... // Returns List
  ...
    myobject.request("123456").map(resp => assert(resp === "....")} // Returns Future[Assertion]
  ...
}

我们可以将List[Future[T]]转换为Future[List[T]]使用

Future.sequence(listOfFutures)

并且,我们可以使用以下方法将List[Assertion]转换为Assertion

assert(listOfAssertions.forall(_ == Succeeded))

把这个放在一起我们得到

Future.sequence {
  NanoHTTPD.Response.Status.values().filter(status => status.getRequestStatus >= 400).map {
    status => {
      val statusCode = status.getRequestStatus
      httpService.setStatusCode(status)
      val responseBody = s"Request failed with status $status"
      httpService.setResponseContent(responseBody)
      val errorMessage = s"Error response (${status.getRequestStatus}): $responseBody"

      myobject.request("123456").map {
        resp => assert(resp === "....")
      }
    }
  }
}.map(listOfAssertions => assert(listOfAssertions.forall(_ == Succeeded)))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM