scalamock:子类型上的通配符参数匹配
在我的班上,我有两个版本的方法.一个是异常,另一个是字符串.
class Foo { def method(e: Exception) = ??? def method(s: String) = ??? } 在JMock中,我可以基于其类型模拟对方法的调用.请注意,我正在使用Exception的子类型来具体了解我在测试中所期望的内容. context.checking(new Expectations() {{ oneOf(mock).method(with(any(SubTypedException.class))); }} 在Scalamock中,我可以使用通配符来匹配 (mock.method(_: Exception)).expects(*).once 当我尝试匹配特定的子类型时,以下内容无法编译(我意识到这在Scala中没有意义). // doesn't compile (mock.method(_: SubTypedException)).expects(*).once 如何将JMock中的with(any(SubTypesException.class))转换为Scalamock?我可以想象使用谓词匹配(在哪里),这是要走的路吗?
解决方法
首先:以下内容无法编译,因为类型归属仅用于帮助(静态)重载分辨率.该行没有Scalamock特有的内容:
(mock.method(_: SubTypedException)) 要测试参数的运行时类型,可以使用ScalaMock 3.2.1中引入的ArgThat以及辅助函数: import scala.reflect.ClassTag def typedArg[T,U : ClassTag]: ArgThat[T] = new ArgThat[T]({ case x: U => true case _ => false }) (mock.method(_: Exception)).expects(typedArg[Exception,SubTypedException]) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |