В настоящее время я начинаю тестировать приложение для Android. У меня возникают проблемы, когда код проверки работоспособности модуля содержит в нем записи журнала. Вот конкретный случай. У меня есть класс, называемый ServiceManager, который имеет метод setSystemPause()
и getSystemPause()
. Я просто хочу простой тест модуля, который осуществлять эту логикуЗаявление о регистрации во время модульного теста
ServiceManager класс:
public class ServiceManager implements IServiceManager {
private final static String TAG = "ServiceManager";
private boolean mSystemPauseStatus = false;
public boolean getSystemPause() {
Log.i ("TAG", "getSystemPause: " + mSystemPauseStatus);
return mSystemPauseStatus;
}
public void setSystemPause (boolean pauseStatus){
Log.i ("TAG", "setSystemPause: " + pauseStatus);
mSystemPauseStatus = pauseStatus;
}
}
испытательной установки:
public class ServiceManagerTest {
@Test
public void testSystemPause() throws Exception {
ServiceManager serviceManager = new ServiceManager();
serviceManager.setSystemPause(false);
assert (! serviceManager.getSystemPause());
serviceManager.setSystemPause(true);
assert (serviceManager.getSystemPause());
}
}
Проблема являются «Log.i» заявления в моем коде. Это приводит следующее сообщение об ошибке:
java.lang.RuntimeException: Method i in android.util.Log not mocked.
Я понимаю, что происходит, во время блока тестирования android.jar библиотеки, которая используется не содержит реального кода, и мне нужно, чтобы дразнить этот призыв к «Log.i».
Но база кода, которую я собираюсь протестировать, содержит множество операторов журнала. Я не хочу издеваться над каждым использованием средства журнала.
Мой вопрос в том, как люди проводят модульное тестирование в Android, имея в своем коде логические операторы. Есть ли другой журнал, который я могу использовать в своем коде вместо класса журнала.
Я также прочитал страницу здесь: https://developer.android.com/training/testing/unit-testing/local-unit-tests.html
Они предлагают делать это в моем build.gradle файле:
android {
...
testOptions {
unitTests.returnDefaultValues = true
}
}
Я не хочу прибегать к этому, потому что я просто хочу Вход появиться. Я хочу правильно высмеять все другие объекты, которые я буду использовать в Android.