Несколько раз имитируйте статический метод с помощью JMockit в тесте JUnit

У меня есть класс со статическими методами, над которым я сейчас издеваюсь с 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();
        }

    }
}

Есть идеи?

6
задан Rufi 25 October 2016 в 16:27
поделиться