Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在scala测试中重写隐式转换?_Scala_Unit Testing_Mockito_Implicit Conversion_Scalatest - Fatal编程技术网

如何在scala测试中重写隐式转换?

如何在scala测试中重写隐式转换?,scala,unit-testing,mockito,implicit-conversion,scalatest,Scala,Unit Testing,Mockito,Implicit Conversion,Scalatest,我正在进行scala测试,测试使用隐式转换方法的代码。我不想使用这些隐式转换,而是希望在测试中模拟/重写它们。有可能吗 implicit class Typeconverter(objA: typeA) { def asTypeB = { // return a typeB object } } def methodA(request: typeA) { ............... request.asTypeB ............... } 在测试me

我正在进行scala测试,测试使用隐式转换方法的代码。我不想使用这些隐式转换,而是希望在测试中模拟/重写它们。有可能吗

implicit class Typeconverter(objA: typeA) {
  def asTypeB = {
    // return a typeB object
  }
}

def methodA(request: typeA) {
  ...............
  request.asTypeB
  ...............
}

在测试methodA时,我想模拟/重写“asTypeB”,而不是调用的实际类型。

这听起来不是个好主意,但是如果您有一个方法或函数,其名称和类型与当前范围中的原始隐式方法或函数相同,它将重写上一个方法或函数。例如,rapture使用此技巧听起来不是一个好主意,但如果您有一个与当前作用域中的原始隐式方法或函数具有相同名称和类型的方法或函数,它将覆盖上一个方法或函数。例如,rapture使用此技巧,与任何其他依赖项一样,您通过传入它使
m
可测试

def m(request: A)(implicit cv: A => B) = ???
然后测试可以显式或隐式地提供任意转换

但是在编译时解决了编译方法内部的隐式错误


要提供自定义测试版本,请提供通过隐式搜索选择的转换的二进制兼容版本。但这可能会很棘手,引用另一个答案,听起来不是个好主意。如果隐式方法包装整齐,那么它可能是可行的

与任何其他依赖项一样,通过传入
m
使其可测试

def m(request: A)(implicit cv: A => B) = ???
然后测试可以显式或隐式地提供任意转换

但是在编译时解决了编译方法内部的隐式错误


要提供自定义测试版本,请提供通过隐式搜索选择的转换的二进制兼容版本。但这可能会很棘手,引用另一个答案,听起来不是个好主意。如果隐式方法包装整齐,那么它可能是可行的

你能添加你当前正在做的事情和你想做的事情的代码吗?你能添加你当前正在做的事情和你想做的事情的代码吗?这不是一个好主意,因为我们正在跳过一些正在测试的代码?我不认为问题是关于编译methodA,但是关于测试,隐式的阴影要生效,类型不必完全相同,它只适用于隐式应用程序。导入以其短名称隐藏,最后导入的将获胜。例如,
导入A.asTypeB;导入B.asTypeB
-第二次导入将对第一次导入进行阴影处理。这不是一个好主意,因为我们正在跳过正在测试的部分代码吗?我认为问题不在于编译methodA,而在于测试methodA。对于其阴影处理,类型不必完全相同,它只适用于隐式应用程序。导入以其短名称隐藏,最后导入的将获胜。例如,
导入A.asTypeB;导入B.asTypeB
-第二次导入将与第一次导入形成阴影。