在我的课堂上,我有两个版本的方法。一个取一个Exception
,另一个取一个String
。
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
如何将with(any(SubTypesException.class))
in转换JMock
为Scalamock
?我可以想象使用谓词匹配(where
),这是要走的路吗?
编辑:考虑一下,JMock
with(any(SubTypedException))
更多的是让编译器满意并表达意图。据我了解,它Matcher
是一个IsAnything
匹配器,因此如果抛出不同类型的异常,测试实际上不会失败。因此,在正确的情况下,它可能需要 Scalamock 更多地捕捉意图并通过测试。解释如何
instanceOf
在 Scalamock 中执行类似操作的奖励积分。