Я довольно новичок в тестировании и пытаюсь изучить jUnit Tests и Robotium
.В моем приложении 4 экрана.
Splash Screen --> Screen2--> Screen 3--> Autocomplete Screen.
[init()] [ check values generated by init() method]
Экран автозаполнения - это когда пользователь что-то вводит, а приложение выполняет автозаполнение из большой базы данных Продуктов.На заставке я инициализирую множество переменных приложения, используя метод init()
в другом классе.Этот метод init()
загрузит настройки usedr, проверит создание базы данных и т. Д. (База данных продукта предварительно упакована в apk, и я копирую базу данных при первом запуске и помечаю ее в SharedPreferences
как copied = true),
Проблема: Как изолировать тестирование экрана автозаполнения?OnCreate AutocompleteActivity зависит от вызова init () в SplashScreen.Я не уверен, когда jUnit создает экземпляр Activity
, (, вероятно, в конструкторе? ).Вот мой TestCaseCode:
import android.test.ActivityInstrumentationTestCase2;
import android.view.View;
import android.widget.ListView;
import com.jayway.android.robotium.solo.Solo;
import com.supervalu.mobile.android.AutoCompleteActivity;
import com.supervalu.mobile.android.db.LocalDb;
public class AutocompleteTest extends
ActivityInstrumentationTestCase2<AutoCompleteActivity> {
private Solo solo;
public AutocompleteTest() {
super("com.****.*****.*****", AutoCompleteActivity.class);
}
protected void setUp() throws Exception {
super.setUp();
LocalDb.init(getActivity().getApplicationContext());
solo = new Solo(getInstrumentation(), getActivity());
}
public void test1Character() {
solo.sleep(2000);
solo.enterText(0, "c");
solo.sleep(10000);
View v = getActivity().findViewById(
com.*****.****.*****.R.id.list);
solo.waitForView(v);
assertTrue(((ListView) v).getChildCount() > 0);
}
public void test3Character() {
LocalDb.init(getActivity().getApplicationContext());
solo.enterText(0, "che");
View v = getActivity().findViewById(
com.*****.****.*****.R.id.list);
solo.waitForView(v);
assertTrue(((ListView) v).getChildCount() > 0);
}
protected void tearDown() throws Exception {
solo.finishOpenedActivities();
super.tearDown();
}
Тестовый пример продолжает создаваться, потому что onCreate требует некоторых значений из LocalDb
, которые должны были быть инициализированы методом init()
.
Я не могу добавитьФункция init () перед супер вызовом в конструкторе.Есть ли способ обойти это, или мне нужно запустить тестовый пример с заставки?
Проблема 2: Если я начинаю тестирование с заставки, мне нужно сначала перейти к экрану автозапуска, прежде чемспособен выполнять любые тесты на нем.Предположим, что я тоже это сделал, затем для каждого теста: test1character () класс выполняет setUp (), затем тест и затем tearDown (), затем перезапускает всю последовательность для функции test3characters ().Становится очень больно повторять переход к экрану автозаполнения каждый раз перед тем, как проверять вводимые данные.Есть предложения по этому поводу?
Я не уверен, какой подход выбрать.Может кто-нибудь, пожалуйста, направить меня?