aka*_*_sh 5 unit-testing scala mocking mockito scala-dispatch
我有一些处理HTTP请求的代码,我想对它进行单元测试.
因此,我正在尝试模拟dispatch.Http甚至更好的dispatch.HttpExecutor(0.8.5)与Scala(2.9.1.final),Mockito(1.9.0-rc1)和ScalaTest(1.6.1),但即使可以'让我的测试代码可编辑.
在MyHttpTest中,我希望收到任何HTTP请求的某些HTTP响应:
import org.scalatest.FunSuite
import org.scalatest.mock.MockitoSugar
import org.mockito.Mockito.when
import org.mockito.Matchers.any
import dispatch._
class MyHttpTest extends FunSuite with MockitoSugar {
test("example") {
val httpMock = mock[HttpExecutor]
when(httpMock.apply(any(classOf[Handler[String]]))).thenReturn("Some_HTTP_response")
}
}
Run Code Online (Sandbox Code Playgroud)
但它会产生编译错误:
error: overloaded method value thenReturn with alternatives:
(httpMock.HttpPackage[String],<repeated...>[httpMock.HttpPackage[String]])org.mockito.stubbing.OngoingStubbing[httpMock.HttpPackage[String]] <and>
(httpMock.HttpPackage[String])org.mockito.stubbing.OngoingStubbing[httpMock.HttpPackage[String]]
cannot be applied to (java.lang.String)
when(httpMock.apply(any(classOf[Handler[String]]))).thenReturn("Some_response")
Run Code Online (Sandbox Code Playgroud)
那么如何模拟调度客户端呢?
我打算回答这个问题,你应该尝试使用ScalaMock而不是Mockito,因为我错误地认为你遇到的问题是由Mockito引起的,而不是真正理解Scala(而ScalaMock是从ScalaMock开始创建的).然而:
HttpExecutor因为它不知道如何处理包对象(ExceptionListener)中定义的类型.该死的!我会尽快解决它 - 感谢你引起我的注意.无论如何,你不能创建一个实例,HttpExecutor#HttpPackage因为它是一个抽象类型.因此,为了解决这个问题,您需要扩展HttpExecutor并制定HttpPackage具体方案.例如:
class MyHttpTest extends FunSuite with MockitoSugar {
trait TestHttpExecutor extends HttpExecutor {
type HttpPackage[T] = T
}
test("example") {
val httpMock = mock[TestHttpExecutor]
when(httpMock.apply(any(classOf[Handler[String]]))).thenReturn("Some_HTTP_response")
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5917 次 |
| 最近记录: |