Что такое юнит-тест, интеграционный тест, дымовой тест, регрессионный тест?

При запуске с помощью значка на главном экране Android всегда будет запускать действие с фильтром android.intent.action.MAIN в вашем AndroidManifest.xml, если приложение уже не запущено (в этом случае оно, очевидно, будет восстанавливать активность поверх стека).

Чтобы достичь описанного, вы можете просто сохранить последнее видимое действие в SharedPreferences и иметь Dispatcher активность, которая запускает последнее действие в соответствии с предпочтениями.

Итак, в каждом действии, который вы хотите перезапустить автоматически:

@Override
protected void onPause() {
    super.onPause();

    SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
    Editor editor = prefs.edit();
    editor.putString("lastActivity", getClass().getName());
    editor.commit();
}

И активность Dispatcher аналогична следующей:

public class Dispatcher extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Class<?> activityClass;

        try {
            SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
            activityClass = Class.forName(
                prefs.getString("lastActivity", Activity1.class.getName()));
        } catch(ClassNotFoundException ex) {
            activityClass = Activity1.class;
        }

        startActivity(new Intent(this, activityClass));
    }
}

Замечания

  • Вы можете создать базовый класс для переопределения onPause
  • . Активность Dispatcher , очевидно, должна быть android.intent.action.MAIN action
669
задан OmG 28 December 2016 в 16:29
поделиться

6 ответов

  • Модульный тест : Укажите и протестируйте одну точку контракта отдельного метода класса. Это должно иметь очень узкий и четко определенный объем. Сложные зависимости и взаимодействия к внешнему миру заблокированы или дразнили .

  • Интеграционный тест : Протестируйте корректное взаимодействие нескольких подсистем. Существует целый спектр там, от тестирования интеграции между двумя классами, к тестированию интеграции с продуктивной средой.

  • Испытание с помощью дыма (иначе Проверка работоспособности) : тест простой интеграции, где мы просто проверяем, что, когда система под тестом вызывается, он обычно возвращается и не аварийно завершается.

    • Испытание с помощью дыма является оба аналогией с электроникой, где первый тест происходит при включении схемы (если это курит, это плохо!)...
    • ... и, , по-видимому , с инфраструктура , где система каналов буквально заполнена дымом и затем проверенная визуально. Если что-нибудь курит, система является текучей.
  • Регрессионный тест : тест, который был записан, когда ошибка была исправлена. Это гарантирует, что эта определенная ошибка не произойдет снова. Полное имя является "нерегрессионным тестом". Это может также быть тест, сделанный до изменения приложения, чтобы удостовериться, что приложение обеспечивает тот же результат.

К этому, я добавлю:

  • Приемочное испытание : Тест, что функция или вариант использования правильно реализованы. Это подобно интеграционному тесту, но с вниманием на вариант использования для обеспечения, а не на включенные компоненты.

  • Тестирование системы : Тестирует систему как черный квадрат. Зависимости от других систем часто дразнят или блокируют во время теста (иначе, это было бы больше интеграционного теста).

  • Проверка перед полетом : Тесты, которые повторяются в подобной производству среде, для облегчения, 'основываются на моей машине' синдром. Часто это понято путем выполнения приемочного испытания или испытания с помощью дыма в производстве как среда.

978
ответ дан ruffin 29 December 2016 в 02:29
поделиться

Некоторые хорошие ответы уже, но я хотел бы, далее совершенствовали их:

Поблочное тестирование является единственной формой тестирования методом "белого ящика" здесь. Другие - тестирование методом "черного ящика". Тестирование методом "белого ящика" означает знание входа Вы знаете внутренние работы механизма и можете осмотреть его, и Вы знаете вывод. С тестированием методом "черного ящика" Вы только знаете то, что вход и каков вывод должен быть.

, Таким образом, явно поблочное тестирование является единственным тестированием методом "белого ящика" здесь.

  • тест Поблочного тестирования определенные части кода. Обычно методы.
  • тест Интеграционного тестирования, может ли Ваша часть новой возможности программного обеспечения межтереть со всем остальным.
  • Регрессионное тестирование. Это тестирует сделанный, чтобы удостовериться, что Вы ничего не повредили. Все, что раньше работало, должно все еще работать.
  • Испытание с помощью дыма сделано как быстрый тест, чтобы удостовериться, что все смотрит хорошо, прежде чем Вы займетесь более энергичным тестированием.
1
ответ дан uriDium 29 December 2016 в 02:29
поделиться
  • 1
    Это изящно, но необходимо сделать один запрос для каждого уровня в дереве объектов. Таким образом, если Вам нужен только верхний объект it' s возможный упаковать его в одном SQL-запросе. Будет последующий отдел запросов, но все еще только одна передача rails -(query)-> database -(result)-> rails. К сожалению, я don' t знают горячий делать это с интерфейсом запросов направляющих. Кто-либо знает? – pablo 7 November 2013 в 21:54
  • Модульный тест : автоматический тест для тестирования внутренних работ класса. Это должен быть автономный тест, который не связан с другими ресурсами.
  • Интеграционный тест : автоматический тест, который сделан на среде, настолько подобной модульным тестам, но с внешними ресурсами (дб, доступ к диску)
  • Регрессионный тест : после реализования новых опций или исправлений ошибок, Вы пересценарии тестирования, которые работали в прошлом. Здесь Вы покрываете возможность, в которой Ваши новые возможности повреждают существующие функции.
  • Испытание с помощью дыма : первые тесты, на которых могут завершить тестеры, продолжат ли они тестировать.
101
ответ дан Gerrie Schenck 29 December 2016 в 02:29
поделиться

У всех будут немного отличающиеся определения, и часто существуют серые области. Однако:

  • Модульный тест: этот немного (как изолировано как возможный) работа?
  • Интеграционный тест: эти два (или больше) компоненты сотрудничают?
  • Испытание с помощью дыма: эта целая система (как близко к тому, чтобы быть производственной системой как возможная) остаются целым обоснованно хорошо? (т.е. действительно ли мы довольно уверены, что это не создаст черную дыру?)
  • Регрессионный тест: разве мы непреднамеренно повторно ввели какие-либо ошибки, которые мы ранее исправили?
86
ответ дан Jon Skeet 29 December 2016 в 02:29
поделиться

недостоверные исторические мелочи: "испытание с помощью дыма" прибывает из подводной разработки (наследованный от инфраструктуры), где литеральный дым был бы накачан в оболочку, чтобы видеть, вышел ли какой-либо из него снова, который был бы скорее поразительным отказом для подводной лодки!

18
ответ дан annakata 29 December 2016 в 02:29
поделиться

Модульный тест: Проверка, что конкретный компонент (т.е. класс) созданные или модифицированные функции, как разработано. Этот тест может быть ручным или автоматизирован, но не перемещается вне границы компонента.

Интеграционный тест: Проверка, что взаимодействие конкретных компонентов функционирует, как разработано. Интеграционные тесты могут быть выполнены на уровне единицы или системном уровне. Эти тесты могут быть ручными или автоматизированы.

Регрессионный тест: Проверка, что новые дефекты не вводятся в существующий код. Эти тесты могут быть ручными или автоматизированы.

В зависимости от Вашего SDLC (водопад, rup, гибкий, и т.д.) конкретные тесты могут быть выполнены в 'фазах' или могут все быть выполнены, более или менее, одновременно. Например, поблочное тестирование может быть ограничено разработчиками, которые тогда передают код тестерам для интеграционного и регрессионного тестирования. Однако другой подход мог бы иметь разработчиков, делающих поблочное тестирование и некоторый уровень интеграционного и регрессионного тестирования (использующий подход TDD наряду с непрерывной интеграцией, и автоматизировал модульные и регрессионные тесты).

комплект инструментальных средств будет зависеть в основном от кодовой базы, но существует много инструментов с открытым исходным кодом для поблочного тестирования (JUnit). (Ртутный) QTP HP или Silktest Borland являются оба инструментами для автоматизированного интеграционного и регрессионного тестирования.

8
ответ дан rdrex 29 December 2016 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: