2015-07-18 2 views
0

В настоящее время я работаю над приложением для Android. Данные, используемые этим приложением, предоставляются веб-сервером. Теперь я хочу протестировать приложение и немного поиграть с ним с использованием тестовых данных, чтобы реальные данные с сервера менялись динамически, и я не всегда могу проверить конкретные функции или посмотреть на конкретные вещи. Два варианта, которые приходят мне на ум:Использование тестовых данных в приложении для Android

  • Хранить тестовые данные в локальной базе данных/файле. Добавьте глобальную переменную типа boolean useTestData и замените соединители веб-сервера таким образом, чтобы они не связывались с веб-сервером в случае, если useTestData имеет значение true. Недостатком является то, что я должен изменить все соединители с кодом, который не будет использоваться в выпущенном приложении.

  • Внедрение второго API веб-сервера для целей тестирования, который предоставит мне только статические тестовые данные. В случае, если для глобальной переменной установлено значение true, будет доступен доступ к тестовому API.

Я думаю, что второй способ - лучший выбор. Может быть, есть и другой альтернативный способ сделать это? Что Вы думаете об этом?

Заранее спасибо.

ответ

0

Лучший способ, который я вижу здесь, - сделать инъекцию зависимости. Что не так с вашими предложениями (кратко):

  1. Вы нарушите логику своих разъемов. Соединители не должны зависеть от ваших тестов.

  2. Вы думаете в правильном направлении, но что бы вы сделали, если вы потеряли соединение или ваш сервер сломался. Этот подход делает ваши тесты немного шелушащими. Результаты теста будут зависеть от состояния сервера и сетевого подключения компьютера, на котором выполняются тесты, и, возможно, на чем-то другом. Это не правильно. Если ваш код написан хорошо, тесты должны выполняться всегда, я имею в виду независимо от чего-либо еще кода.

Поэтому предлагаю абстрагироваться от вашего коннектора.

public interface IConnector { 
    // e.g. 
    public JSONObject getData(String what); 
} 

public class Connector implements IConnector { 
    public JSONObject getData(String what) { 
     // actual implementation that is already written 
     // here you make requests to server and so forth 
    } 
} 

// mock implementation of your api 
public class TestConnector implements IConnector { 
    public JSONObject getData(String what) { 
     // predictable behaviour without requests to server 
    } 
} 

public class MyActivity extends Activity { 
    public IConnector connector = new Connector(); 

    /** 
    * This method substitutes implementation of connector. 
    * Use this for testing purposes. 
    */ 
    public void setConnector(IConnector impl) { 
     connector = impl; 
    } 

    //rest of the code... 
} 

Тогда вы получите предсказуемое и детерминированное поведение в тестах без значительных изменений кода.

Btw Я слышал о Dagger. Это библиотека для инъекций зависимостей, которая должна помочь в таких ситуациях. Но у меня не было времени попробовать, поэтому я не могу сказать определенную информацию об этом.

Надеюсь, это поможет вам.

+0

Спасибо за это предложение, я думаю, что именно так я и искал. Попробуй! – valdes21

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