私のクラスでは、2 つのバージョンのメソッドがあります。1 つは 、もう 1 つは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))
を に変換するにはどうすればよいJMock
ですScalamock
か? 述語一致 ( ) を使用することは想像できますが、それでよいwhere
でしょうか?
編集:考えてみると、JMock
with(any(SubTypedException))
はコンパイラを満足させ、意図を表現することを目的としています。私が理解しているように、これMatcher
はIsAnything
マッチャーであるため、別のタイプの例外がスローされた場合、実際にはテストに失敗しません。そのため、適切な状況下でインテントを取得し、テストに失敗することの両方を Scalamock に要求している可能性があります。
instanceOf
Scalamockのようなことを行う方法を説明する際のボーナス ポイント。