ScalaTest AsyncFunSuiteLike 多个断言
ScalaTest AsyncFunSuiteLike multiple asserts
我正在重写用于测试用字符串响应的 Akka actor 的测试,现在,我们使用 returns 和 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]]
知道如何在这样的单个测试中实现多个断言吗?
ScalaTest asynchronous testing 期望测试主体为 return Future[Assertion]
。现在你的测试体 returns 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)))
我正在重写用于测试用字符串响应的 Akka actor 的测试,现在,我们使用 returns 和 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]]
知道如何在这样的单个测试中实现多个断言吗?
ScalaTest asynchronous testing 期望测试主体为 return Future[Assertion]
。现在你的测试体 returns 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)))