Повторная загрузка статических переменных в начале каждого модульного теста

Я тестирую блок SDK с множеством статических методов. И я не хочу, чтобы операции, которые я выполнял в test1 (), влияли на операции, которые я выполняю в test2 (). В начале каждого теста мне нужно, чтобы все статические переменные в SDK возвращались в неинициализированное состояние, как если бы они не были загружены. И затем загрузите их снова. Любые предложения о том, как это сделать? Есть ли какие-либо условия для чего-то подобного в Robolectric? Потому что я использую это для модульного тестирования. В плане английского языка то, что я в основном хочу, это чистый список в начале каждого теста.

@Test public void test1() throws Exception { // Setup all the device info values MyDeviceInfoClass.setDeviceModel().equals("Nexus 4"); MyDeviceInfoClass.setDeviceOperatingSystem().equals("Android_3.4b5"); // Verify all the device info values set previously assertTrue(MyDeviceInfoClass.getDeviceModel().equals("Nexus 4")); assertTrue(MyDeviceInfoClass.getDeviceOperatingSystem().equals("Android_3.4b5")); } 

Это был первый тест, и он преуспел. Так и должно быть. Затем во втором тесте:

 @Test public void test2() throws Exception { // Setup all the device info values MyDeviceInfoClass.setDeviceOperatingSystem().equals("Android_4.2"); //The following line also succeeds if test1() is finished. But I do not want that. This line should throw an assertion error because we did not specify what the device is over here in test2(). assertTrue(MyDeviceInfoClass.getDeviceModel().equals("Nexus 4")); //This will succeed just the way it should be. assertTrue(MyDeviceInfoClass.getDeviceOperatingSystem().equals("Android_4.2")); } 

Я не хочу, чтобы значения, установленные в первом тесте, влияли на значения, полученные во втором тесте. Тест, показанный выше, является простыми примерами. Но SDK, который я тестирую, более сложный, чем это.

Чтобы это было более ясно, я не хочу, чтобы значения, установленные в test1 (), имели какое-либо влияние на операции, выполняемые в test2 (). Если я установил модель устройства в Nexus 4 в test1 (), как этот MyDeviceInfoClass.setDeviceModel (). Equals («Nexus 4»), второй тестовый тест2 () не должен знать об этом, когда я извлекаю его через MyDeviceInfoClass.setDeviceModel () .equals («Nexus 4»). Я хочу полную изоляцию между моими модульными тестами.

Также отказ от статических методов не является вариантом. Скажите, пожалуйста, как я могу это достичь.

EDIT: Сброс всех статических переменных до начала теста не является вариантом из-за определенных сложностей, связанных с проектом.

Единственное время, когда статические переменные выгружаются, – это когда загрузчик классов, загружающий класс, о котором идет речь, собирает мусор.

Один из способов решения вашей проблемы – использовать свой собственный загрузчик классов. Здесь есть большой вопрос SO, который охватывает это довольно подробно.

Другой вариант – просто сбросить значения перед каждым тестом. Вы можете предоставить в своем тестовом классе метод @Before annotated, который бы сбросил их, используя при необходимости отражение.