我创建了一个与下面提到的工作流处理器特性类似的特性:
import org.scalatestplus.play._
import play.api.mvc._
import play.api.test._
import play.api.test.Helpers._
import org.scalatest.Matchers._
import org.scalamock.scalatest.MockFactory
import utils.OAuthUtils._
import utils.OAuthUtils
import utils.OAuthProcess
import play.api.Application
import scala.concurrent.ExecutionContext
import scala.concurrent.Future
import play.api.libs.json.JsResult
import play.api.libs.json.Json
import play.api.libs.json.JsSuccess
import play.api.libs.json.JsError
import play.api.libs.ws.WS
trait MyProcess[A] {
type B
type C
type D
def stage1(s: String): B
def stage2(b: B)(implicit e: ExecutionContext, app: Application, a: A): Future[C]
def stage3(c: C)(implicit e: ExecutionContext, app: Application, a: A): Future[JsResult[D]]
def process(s: String)(implicit e: ExecutionContext, app: Application, a: A): Future[JsResult[D]] = {
val b = stage1(s)
val f_d = for {
c <- stage2(b)
d <- stage3(c)
} yield d
f_d
}
}
class TestController extends PlaySpec with Results with MockFactory {
"MyController" must {
" testing for method process" in {
running(FakeApplication()) {
implicit val context = scala.concurrent.ExecutionContext.Implicits.global
implicit val s = "implicit String"
implicit val currentApp = play.api.Play.current
case class TestParms(s: String)
abstract class TestProcessor extends MyProcess[TestParms] {
type B = String
type C = String
type D = String
}
implicit val t = stub[TestProcessor]
t.stage1(_: String).when(token).returns(testToken)
(t.stage2(_: String)(_: ExecutionContext, _: Application, _: TestParms)).when(token, context, currentApp, tp).returns({
Future.successful(stage2String)
})
(t.stage3(_: String)(_: ExecutionContext, _: Application, _: TestParms)).when(token, context, currentApp, tp).returns({
Future.successful(Json.fromJson[String](Json.parse(stage3String)))
})
}
}
}
}
t.stage1(_: String).when(token).returns(testToken)
overloaded method value when with alternatives: (resultOfAfterWordApplication: org.scalatest.words.ResultOfAfterWordApplication)Unit <and> (f: => Unit)Unit cannot be applied to (String) TestController.scala /play-scala/test/controllers
有人能帮忙吗?我发现为Scala类编写单元测试是非常困难的,而且还会嘲笑它们。
build.sbt中的最缩放版本:
"org.scalatestplus" %% "play" % "1.2.0" % "test",
"org.scalamock" %% "scalamock-scalatest-support" % "3.2" % "test",
请尝试用括号包装调用
(t.stage1(_: String)).when(token).returns(testToken)
我相信scalac认为您试图在string
的实例上调用when
(因为这将是T.stage1(_)
返回的内容)。
我正对着< code > org . Apache . poi . open XML 4j . exceptions . open XML 4 jruntimeexception:保存失败:保存包时出错:无法用marshaller在流中保存零件/docProps/app.xml 在每个测试场景执行完成后,尝试将每个测试场景结果(通过或失败)写入Excel表(.xlsx)时出现异常。为此,我编写了以
我试图通过在传入字符串“John”时返回一个用户对象来建立类(spring-data-jpa存储库)的方法。 发生的情况是,在userService中,当调用users.findbyUsername(“John”)时,它总是返回null,而不是我定义的任何用户对象: 当我在测试方法中放置断点并比较users和UserService.users时,它们是相等的。 pom版本
通过Zef安装了Cro,但无法运行“Cro存根”、“Cro运行”等 (编辑:Fedora 28,Fedora的rakudo) 那么,“cro”安装在哪里?哪儿都找不到。 许可证:艺术-2.0 Source-url:https://github.com/croservices/cro-core.git 提供: 19个模块 取决于: 0项 更新:我已经安装了“cro”,没有“cro”(都是小写)。 根
我正在使用某个抛出异常的库,并希望测试在抛出异常时我的代码行为是否正确。将其中一个重载方法截尾似乎不起作用。我得到了这个错误:Stubber不能应用于void。不存在变量类型T的实例类型,因此void确认为T
我设法通过.proto文件生成了类,但它们在构建中。 我希望在main中生成类,因为当我要扩展存根时,不可能实现这些方法。 瞧: 文件.proto: proto文件在主文件夹中。 有人知道怎么解决吗?
我有一个Redux操作,它本身分派了另外两个操作。每个操作都是从导入的函数中检索的。一个来自本地模块,另一个来自外部库。 在我的测试中,我使用一个 沙箱来存根函数,但只有两个测试通过。我期待所有3个都通过。 最后一个预期失败,错误为: TypeError:[Function:functionB]不是间谍或对间谍的调用! 当我将功能输出到控制台时,我得到了这个,这似乎与Babel导入导出导出的方式有