Статьи

Тестовое обучение

Обзор разделов

0. Эта обзорная статья с

примером 1. … Hello World

2. Начальная коробка игры

3. Объектно-ориентированное программирование — рефакторинг !

4. Пользовательский интерфейс — Swing !

5. Дополнительные функции игры

Идея разработки через тестирование ( TDD ) не нова, а также идея обучения через тестирование не нова (см. Также в Springer или здесь ).

Основная идея заключается в написании рабочих примеров кода на основе TDD для начинающих. Затем студенты должны иметь возможность кодировать (модульные) тесты и читать их с самого начала. Большинство людей выучили TDD спустя несколько лет после изучения «самого программирования», хотя я думаю, что TDD уже является частью любого кодирования. Большинство программистов «кодируют» + «тестируют» + «исправляют ошибки» + «тестируют» + и т. Д. Но с помощью TDD вы получаете преимущество, заключающееся в том, что ваши тесты могут выполняться позже автоматически и очень быстро, что гарантирует выполнение ранних требований

  • даже если тот же программист забыл их или
  • если несколько программистов работают над одним и тем же проектом одновременно или также
  • если программист должен возобновить работу другого.

Я не буду здесь подробно рассказывать о TDD, но основные преимущества TDD:

  • При правильном применении (= рано!) Вы можете часто кодировать быстрее с помощью TDD
  • Более поздние рефакторинги намного быстрее и менее подвержены ошибкам (!!)
  • Тестируемый код часто является «лучшим» кодом с точки зрения читабельности и повторного использования
  • Вы косвенно документируете функциональность, и (модульные) тесты можно использовать как запрос функции или отчеты об ошибках.

«Реальный» цикл разработки TDD описан в Википедии . Мое субъективное предложение вам, мой читатель:

  1. думать и исходный код
  2. думать …
  3. проверить немного (написать тест)
  4. немного кодировать
  5. тест пройден?

    • да => повторить с 2. (если все остальные тесты тоже пройдены)
    • нет => найдите ошибку и повторите с 4. или 3.

На всех этапах может быть задействован рефакторинг .

Таким образом, в дополнение к объяснению, что представляют собой различные примитивные типы в Java, будут выполнены модульные тесты, подобные следующим:

 

@Test
public void testLongAndInteger() {
// an important difference of a long value to an integer value is the range:
int expectedInt = 2147483647;
// L indicates a long value
long expectedLong = 9223372036854775807L;
assertEquals( expectedInt, Integer.MAX_VALUE);
assertEquals(expectedLong, Long.MAX_VALUE);

// here is the problem what happens to an integer variable which
// exceeds its domain: increasing the maximal value will cause the
// variable to be negative!
int intVal = Integer.MAX_VALUE + 1;
assertTrue(intVal < 0);
}

Этот простой учебник не заменит старый добрый учебник по Java, например, JavaInsel (немецкий) или другой , но может использоваться параллельно. Жаль, что даже такие большие и великие книги не учат таким важным ручным инструментам, как TDD.

Другие важные этапы обучения должны быть задействованы при обучении языку программирования:

  • Контроль версий (subversion, базар, ртуть, мерзавец,…)
  • Обработка IDE (запуск, отладка, тестирование, рефакторинг , форматирование,…)
  • Использование внешних библиотек или ссылки на списки ресурсов (например, этот )

Итак, как мы должны структурировать такой курс для начинающих, в котором участвует разработка, основанная на тестировании?

Как начинающий, я бы предпочел проект «реальной жизни». Мы должны разработать идею и реализовать ее во время обучения (с рефакторингом!). Это должна быть идея, которая не требует большого количества настроек или внешних ресурсов (таких как подключение к интернету, веб-приложение и т. Д.). И это должно быть либо полезно (например, как инструмент преобразования xml), игра или sth. это выглядит красиво .

В этом уроке мы реализуем простую игру с Swing в качестве графического пользовательского интерфейса ( GUI ), чтобы сделать его визуально более привлекательным, чем обычный вывод на консоль. Главы Swing-кода следует и можно пропустить при первом чтении. Хотя код пользовательского интерфейса можно протестировать (например, с помощью FEST ), этого не получится из-за нехватки времени на себя. Сама игра должна выглядеть это , но на самом деле не будет (опять — таки не хватает времени).

Если вы хотите нанять учебные курсы здесь, в Германии: напишите мне по электронной почте через peathal ät yahoo.de

Давайте начнем сейчас с первой части

Первая часть этого урока для начинающих — это обычный пример «Hello World», который не будет тестироваться. Эй, почему бы и нет? Потому что этот простой пример используется только для проверки работоспособности установки.

Что вы узнаете в этом разделе:

  • Настройка простого Java-проекта
  • IDE: запустить приложение
  • Методы с параметрами
  • для цикла

Читатель узнает, как настроить пример в выбранной им интегрированной среде разработки ( IDE ), собрать и запустить его. Он увидит, что «Hello World» будет напечатан в окне вывода консоли IDE.

Я объясню настройку только для NetBeans . Но есть и другие бесплатные и очень мощные IDE. Например, Eclipse и IntelliJ Idea могут быть использованы в качестве хорошей альтернативы.

В качестве самого первого шага загрузите и установите Java Development Kit ( JDK ) от Sun (не Java Runtime Environment = JRE ). Тогда получите последнюю версию NetBeans здесь, где достаточно пакета Java SE.

Получить пример как почтовый файл здесь и распаковать его в ваши местные NetBeans папки с помощью:

Откройте избранное окно под Window-> Favorites. Щелкните правой кнопкой мыши в этом окне и добавьте папку загрузки (с файлом zip) в избранное:

Разверните zip-файл (левый треугольник) и скопируйте папку, щелкнув правой кнопкой мыши:

Затем вставьте его туда, где хотите. Откройте проект с помощью правой кнопки мыши -> Открыть проект ‘TestDrivenTeaching1’ или откройте его через Файл-> Открыть проект …

Весь код является свободным программным обеспечением и распространяется под лицензией GPL v3.0 . Все источники расположены в папке src; все подпапки в этой папке эквивалентны пакетам Java и используются для лучшей организации вашего кода. Вы увидите логическое представление Java-пакета для этого проекта в «Окне проектов» и «обычная папка» в окне «Файлы»:

Поэтому загляните в пакет de.tdtut.section1, чтобы открыть класс HelloWord двойным щелчком мыши:

Затем нажмите «Run File» или нажмите SHIFT F6 в этом файле HelloWorld, и вы увидите в «Output Window» sth. лайк:

run:

Hello World

0

BUILD SUCCESSFUL

(Первый и последний оператор генерируются из NetBeans и должны игнорироваться!)

Под капотом группа символов «Hello World» под названием String будет передана в качестве единственного параметра методу println («печать строки в стандартный вывод»).

Любое автономное Java-приложение может быть запущено вне NetBeans, например, из командной строки. Перейдите в папку проекта и введите:

java -cp dist/TestDrivenTeaching.jar de.tdtut.section1.HelloWord

В качестве результата вы должны увидеть только «Hello World». Последний аргумент должен быть классом с методом main:

public static void main(String[] args)

Если вы добавите некоторые аргументы, например, через:

java -cp dist/TestDrivenTeaching.jar de.tdtut.section1.HelloWord arg1 arg2

Ты увидишь

Hello World
2
arg1
arg2

Это из-за цикла for, который просматривает список строк и выбирает одну за другой.

for (String arg : args) {
System.out.println(arg);
}

Этот список называется массивом и был инициализирован из аргументов командной строки и имеет статическую длину, которую впоследствии нельзя изменить. Если вы хотите получить доступ к одному элементу массива, вы можете сделать это с помощью args [0] и args [1]. Убедитесь, что число (называемое индексом) начинается с 0 и продолжается только до args.length — 1. Поэтому, если вы хотите иметь полный контроль над итерацией, используйте эту версию с явным счетчиком типа int:

for (int i = 0; i < args.length; i++) {
System.out.println(args[i]);
}

Счетчик i объявлен (и виден) только внутри блока цикла for. С линией

int i = 0;

я был объявлен и
инициализирован с 0. После каждого шага я буду увеличиваться на единицу. Цикл выполнит свой блок, только если счетчик i меньше, чем args.length.

Вопросы

Если последние предложения были немного подавляющими для вашей головы: нет проблем! Просто попробуйте немного или перейдите к следующему разделу !

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

С http://karussell.wordpress.com