У меня есть класс со статическими методами, над которым я сейчас издеваюсь с JMockit. Скажем, это выглядит примерно так:
public class Foo {
public static FooValue getValue(Object something) {
...
}
public static enum FooValue { X, Y, Z, ...; }
}
У меня есть другой класс (назовем его MyClass), который вызывает статический метод Foo; Я пытаюсь написать тестовые примеры для этого класса. Мой тест JUnit, использующий JMockit, выглядит примерно так:
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.FooValue.X, когда он вызовет Foo.getValue ( ).
Итак, я ' m пытается перебрать все значения в перечислении и повторно запустить тест. Если я помещу приведенный выше тестовый код в цикл 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();
}
}
}
Есть идеи?