現在JMockitでモックしている静的メソッドを持つクラスがあります。次のように見えるとします。
public class Foo {
public static FooValue getValue(Object something) {
...
}
public static enum FooValue { X, Y, Z, ...; }
}
Foo の静的メソッドを呼び出す別のクラス (MyClass と呼びましょう) があります。このクラスのテストケースを書こうとしています。JMockit を使用した私の JUnit テストは、次のようになります。
public class MyClassTest extends TestCase {
@NonStrict private final Foo mock = null;
@Test public void testMyClass() {
new Expectations() {
{
Foo.getValue((Object) any); result = Foo.FooValue.X;
}
};
}
myClass.doSomething();
}
これはうまく機能し、テストが実行されると、MyClass のインスタンスは Foo.getValue() を呼び出すときに Foo.FooValue.X の列挙値を正しく取得します。
今、列挙内のすべての値を反復処理し、テストを繰り返し実行しようとしています。上記のテスト コードを for ループに入れて、モック化された静的メソッドの結果を各列挙値に設定しようとしても、うまくいきません。Foo.getValue() のモック バージョンは常に Foo.FooValue.X を返し、列挙を反復処理するときに他の値を返すことはありません。
単一の JUnit テスト内で静的メソッドを複数回モックするにはどうすればよいですか? 私はこのようなことをしたいです(しかし、明らかにうまくいきません):
public class MyClassTest extends TestCase {
@NonStrict private final Foo mock = null;
@Test public void testMyClass() {
for (final Foo.FooValue val : Foo.FooValue.values() {
new Expectations() {
{
// Here, I'm attempting to redefine the mocked method during each iteration
// of the loop. Apparently, that doesn't work.
Foo.getValue((Object) any); result = val;
}
};
myClass.doSomething();
}
}
}
何か案は?