【发布时间】:2022-01-12 17:32:57
【问题描述】:
我正在尝试模拟 Http 调用以进行单元测试。 为此,我做了以下工作,我创建了一个 RequestMock 案例类:
case class RequestMock() {
def sendRequest(httpRequest: HttpRequest)(implicit actorSystem: ActorSystem): Future[HttpResponse] = {
Http().singleRequest(httpRequest)
}
}
在我的服务中,我编写了以下代码:
case class Service(requestHandler: RequestMock) {
....
for {
response <- {
requestHandler.sendRequest(
HttpRequest(
method = HttpMethods.GET,
uri = "http://database:9000"
)
)
} yield {
response
}
}
对于单元测试,我正在尝试模拟 HttpCalls,为此,我做了以下工作:
def test_2 = mock[RequestMock]
为了定义模拟行为,我做了以下操作
when(test_2.sendRequest(
HttpRequest(
method = HttpMethods.GET,
uri = "http://database:9000")
)).thenReturn{
Future(
HttpResponse(
StatusCodes.OK,
entity = HttpEntity(ContentTypes.`text/plain(UTF-8)`,"connection established"))
但是,当我执行单元测试时,我总是收到以下错误:
java.lang.NullPointerException
有谁知道我该如何解决这个问题?
【问题讨论】:
-
你从哪里得到异常?你试过调试你的代码吗?
-
是的,我在 requestHandler.sendRequest 中遇到了错误
-
能否提供更多的测试线?如何在测试中创建
Service对象?您是否将模拟的请求传递给Service? -
我有一个服务类,定义如下:
case class Service(requestHandler: RequestMock) { def getDatabase{ for { response <- { requestHandler.sendRequest( HttpRequest( method = HttpMethods.GET, uri = "http://database:9000" ) ) } yield { response },我有路由类:case class ServiceRoute(sendRequest: RequestMock) { def getAdWeeksRoute: Route = path("database" ) { get { service.getDatabase } } -
对于测试类:``` def httpRequestMock = mock[RequestMock] val databaseRoutes = ServiceRoute(httpRequestMock) private val routes = Route.seal(databaseRoutes .routes) ```
标签: scala unit-testing mocking mockito httprequest