Урок 2. Основные ключевые слова Java: практика и тестирование


На этом уроке из моего бесплатного курса Java мы применим то, что мы узнали в моем введении. Если вы еще не сделали этого, я бы рекомендовал вам прочитать его, используя ссылку выше, чтобы вы могли понять концепции, которые мы применяем здесь.

Написание теста

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

Еще одна причина для написания тестов заключается в том, что это поможет в написании более чистого кода. Тест дает внешнее представление о вашей программе – если ваш код трудно использовать, вы испытаете боль, и это заставит вас рефакторить и улучшать его. Когда это происходит со мной, я обычно говорю: “тест говорит со мной”.

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

PersonTest

Теперь, когда я объяснил, почему мы должны написать тест, давайте начнем кодировать! В Примере 1, я перешел в класс PersonTest, что я только что создал. Я нахожусь в своем редакторе программ или IDE (интегрированной среде разработки), где мы пишем наш код. Существует множество IDE для Java, и каждый из них имеет свои специфические функции. Как правило, они действуют как редакторы для вашего кода, выделяя различные ключевые слова, указывая на ошибки и помогая вам в вашем кодировании. IDE чрезвычайно полезна и облегчает каждый шаг процесса программирования для программиста.

Например, они помогают программистам, заполняя строки кода, автоматически создавая структуры пакетов и автоматически импортируя пакеты, когда они используются. Однако я думаю, что IDE-это костыль для тех, кто учится программировать. Это не позволяет вам полностью понять, что вы делаете и как вы это делаете, и если в какой-то момент Вы не можете использовать IDE, вы не сможете функционировать без него. По этой причине я бы рекомендовал вам начать кодирование с помощью простого текстового редактора и компиляции из консоли, пока вы не закончите первые двадцать уроков этого курса. Это позволит вам сосредоточиться на изучении ключевых аспектов Java без помощи IDE.

Если вернуться к примеру 1, то все тестовые классы находятся в структуре папок src / test/java, а не тестовый код будет храниться в src/main/java. Имя пакета в основном идентично структуре папок, но Java придает последнему особое значение. Итак, наш пакет называется ru.upread.javacourse будут в конечном итоге в структуре папок с ru/upread /javacourse. Помните, что структура папок должна быть идентична имени пакета в классе Java, Java проверит это!

А теперь вернемся к нашему классу. Мы должны начать с нашей декларации пакета. Чтобы структура нашего пакета соответствовала структуре папок, описанной выше, мы должны объявить наш пакет ru.upread.javacourse на вершине нашего класса. Чтобы закончить утверждение, мы должны поставить точку с запятой. Вот как это выглядит все вместе:

package ru.upread.javacourse;
Далее я определяю свой класс, который называется PersonTest. Я делаю это, сначала набирая public, затем class и, наконец, имя класса PersonTest. Затем я добавляю открывающие и закрывающие фигурные скобки. Между фигурными скобками находится место, где вы пишете свой код.

package ru.upread.javacourse;

public class PersonTest {
     
}
@Test и наш метод тестирования

Согласно документации JUnit 4, аннотация @Test сообщает JUnit, что метод public void, к которому прикреплена аннотация, может быть запущен в качестве тестового случая. Если мы запустим тест и условие теста не будет выполнено, тест завершится неудачей.

Чтобы использовать аннотацию JUnit @Test, мы сначала импортируем ее, как вы можете видеть ниже:

import org.junit.Test;
Как указано выше, метод тестирования Junit 4 должен быть общедоступным и не должен содержать никаких параметров. Кроме того, для названия метода мы можем свободно выбрать любое название, которое мы хотели бы. Как правило, во время тестирования сосредоточьтесь на том, что ваша программа должна делать, а не на том, как это делается. Этому можно способствовать, следуя очень простому правилу: начните имя вашего метода тестирования с “ДОЛЖЕН", а затем то, что вы ожидаете от метода, с точки зрения клиента.

В нашем случае мы будем называть наш метод тестирования shouldReturnHelloWorld(). "Hello World “ - это запущенная шутка в мире программистов, где первая программа, которую вы пишете на любом языке, всегда должна возвращать ”Hello World". Излишне говорить, что мой курс не собирается нарушать это правило :).

Наконец, над нашим методом тестирования мы добавляем аннотацию @Test, чтобы сообщить JUnit, что этот метод является тестовым случаем, как описано выше. Вот как выглядит наш код на данный момент:

package ru.upread.javacourse;
import org.junit.Test;
public class PersonTest {
    @Test
    public void shouldReturnHelloWorld() {
     
    }
}
Переменная

Хорошо, давайте напишем тест! В этом тесте мы ожидаем, что объект Person вернет нам “Hello World". В Java обычный текст, такой как” Hello World", представляет собой определенный тип данных, называемый строкой. Итак, в этом тестовом методе мы ожидаем получить строку “Hello World”. Мы на самом деле не написали никакого кода для объекта Person, чтобы сделать это, но мы начинаем в обратном порядке, начиная с теста, так что вы можете предположить, что класс Person выполнен, даже если ваш компилятор скажет вам, что это не так.

Для этого человека мы создадим переменную. Нам нужно имя для нашей переменной; я собираюсь назвать свою marcus. Итак, чтобы создать переменную, мы вызываем конструктор, создаем объект типа Person в памяти и присваиваем его переменной с именем marcus, как вы можете видеть ниже.

package ru.upread.javacourse;
import org.junit.Test;
public class PersonTest {
    @Test
    public void shouldReturnHelloWorld() {
         Person marcus = new Person();
    }
}
Как я уже говорил выше, это центральная часть написания теста. Сначала мы создадим наш тест полностью, а затем создадим классы и методы, необходимые для его прохождения.

assertEquals

Мы можем проверить, что метод возвращает “Hello World " с помощью статического метода JUnit assertEquals(). Мы импортируем этот метод, добавив метод assertEquals ниже нашего другого оператора импорта, как вы можете видеть ниже. Это особый вид импорта, называемый статическим импортом, который я объясняю в этой статье.

import static org.junit.Assert.assertEquals;
Метод assertEquals() ожидает два аргумента. Первое значение - это ожидаемое значение, второе значение - фактическое значение. Ожидаемое и фактическое значения должны быть равны, иначе метод assertEquals() выдаст ошибку и тест завершится неудачей.

В качестве первого аргумента мы ставим строку "Hello World", так как именно этого мы ожидаем от нашего метода helloWorld(). В качестве второго аргумента мы непосредственно ставим вызов метода helloWorld(), так как он вернет фактическое значение. Вот как это выглядит все вместе взятое:

package ru.upread.javacourse;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class PersonTest {
       @Test
       public void shouldReturnHelloWorld() {
       Person marcus = new Person();
       assertEquals("Hello World", marcus.helloWorld() );
   }
}
В настоящее время код, показанный выше, не будет работать, потому что нам все еще нужно реализовать класс Person. Мы также до сих пор не создали метод helloWorld(), так как мы не создали класс (оба выделены красным цветом). Итак, давайте создадим этот класс и метод. Поскольку это метод типа String, он должен возвращать строку. Так что в этом случае наш класс Person вернет строку "Hello World". В предыдущей статье я упоминал о различии между методами команд и методами запросов. Этот метод helloWorld () является первым методом запроса, который мы написали. Он не изменяет состояние класса Person, однако что-то возвращает. Взгляните на наш класс Person:

package ru.upread.javacourse;
public class Person {


    public String helloWorld() {
         return "Hello World";
    }
}
Если мы сейчас выполним наш тест, то получим зеленую полосу, значит тест прошел успешно! Это доказывает, что мы правильно реализовали наш первый рабочий код! Ура.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, уроки по Java, java, практика, тестирование




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Задача по кредиту
Урок 10. Массивы Java
Заметки