2016-03-02 2 views
0

У меня есть тест, где я настраиваю некоторые общие приборы, но после использования PowerMockRule статические переменные, которые я настраиваю в моем методе @BeforeClass, возвращаются к нулевому значению. Это приведет к тому, что следующий тест завершится неудачей, если вы удалите PowerMockRule, который он передает.Общие настройки Fixture с PowerMockito и @BeforeClass

public class Test 
{ 
    @Rule 
    public PowerMockRule rule = new PowerMockRule(); 

    private static String MyString; 

    @BeforeClass 
    public static void setupClass() throws Exception 
    { 
     MyString = "FOO"; 
    } 

    @org.junit.Test 
    public void test() throws Exception 
    { 
     assertEquals("FOO", MyString); 
    } 
} 

ответ

0

У меня есть ответ, но вам это не понравится.

Короткий ответ: он выглядит как дефект в PowerMock, так create a issue в нашей системе отслеживания ошибок

Длинный ответ: Как вы знаете PowerMock, чтобы иметь возможность издеваться статические, частные и так далее классов нагрузок пользовательским загрузчиком классов и измененным байтовым кодом. Затем используется , а PowerMock может контролировать загрузку тестового класса, а тестовый класс также загружается пользовательским загрузчиком классов. В случае, если другой jUnitRunner запускает тест и используется PowerMockRule, тогда класс тестирования и все другие классы, необходимые для тестирования, загружаются стандартным загрузчиком классов. PowerMock перезагружает все эти классы, используя глубокое копирование с сериализацией/десериализацией или используя objenesis. Так как класс перезагружен, все статические поля, которые были инициализированы, равны null.

Я коротко проверил код, и я не нашел тест для ваших дел и что мы обработали @BeforeClass, поэтому create a issue в нашем трекере ошибок, и я проверю его глубоко.

Кстати, пожалуйста, укажите, какую версию вы используете и какие зависимости вы используете.

Смежные вопросы