Руководство по JUnit. Написание тестов

В данной статье мы рассмотрим базовые принципы написания тестов. Мы создадим POJO класс, класс с его бизнес-логикой и, непосредственно, тестовый класс.

Создадим пакет developer

junitwritingteststructure

Создадим простой POJO (Plain Old Java Object) класс Developer.java


package net.proselyte.tutorials.junit.developer;

import java.util.Currency;

/**
 * Simple JavaBean domain object that represents a Developer
 *
 * @author Eugene Suliemanov
 * @version 1.0
 */
public class Developer {
    private String firsName;

    private String lastName;

    private String specialty;

    private int salary;

    public Developer() {
    }

    public Developer(String firsName, String lastName, String specialty, int salary) {
        this.firsName = firsName;
        this.lastName = lastName;
        this.specialty = specialty;
        this.salary = salary;
    }

    public String getFirsName() {
        return firsName;
    }

    public void setFirsName(String firsName) {
        this.firsName = firsName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getSpecialty() {
        return specialty;
    }

    public void setSpecialty(String specialty) {
        this.specialty = specialty;
    }

    public int getSalary() {
        return salary;
    }

    public void setSalary(int salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "Firs Name: " + firsName +
                "\nLast Name: " + lastName +
                "\nSpecialty:" + specialty +
                "\nSalary: $" + salary / 100 + "." + salary % 100;
    }
}

Класс DeveloperLogic.java


package net.proselyte.tutorials.junit.developer;

/**
 * Business logic for class {@link Developer}
 *
 * @author Eugene Suliemanov
 * @version 1.0
 */
public class DeveloperLogic {

    public int calculateHourRate(Developer developer) {
        return developer.getSalary() / 20 / 8;
    }

    public int calculateAnnualSalary(Developer developer) {
        return developer.getSalary() * 12;
    }
}

Данный класс, вычисляет часовую ставку и годовой доход разработчика.

Создадим тестовый класс DeveloperTests.java


package net.proselyte.tutorials;

import net.proselyte.tutorials.junit.developer.Developer;
import net.proselyte.tutorials.junit.developer.DeveloperLogic;
import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.assertEquals;

/**
 * Test class for class {@link Developer}
 *
 * @author Eugene Suliemanov
 * @version 1.0
 */
public class DeveloperTests {
    Developer developer = new Developer();
    DeveloperLogic logic = new DeveloperLogic();

    @Before
    public void setUp(){
        developer.setFirsName("Simple");
        developer.setLastName("Developer");
        developer.setSpecialty("Java");
        developer.setSalary(2000_00);
    }

    @Test
    public void shouldCreateDeveloperInstanceTest(){
        assertEquals("Simple", developer.getFirsName());
        assertEquals("Developer", developer.getLastName());
        assertEquals("Specialty", developer.getSpecialty());
        assertEquals(2000_00, developer.getSalary());
    }

    @Test
    public void shouldCalculateAnnualSalaryTest(){
        assertEquals(24_000_00, logic.calculateAnnualSalary(developer));
    }
    
    @Test
    public void shouldCalculateHourRateTest(){
        assertEquals(12, logic.calculateHourRate(developer)); 
    }
}

Метод shouldCreateDeveloperInstanceTest() проверяет работу getters и setters.
Метод shouldCalculateAnnualSalaryTest() проверяет корректность вычисления годового дохода разработчика.
Метод shouldCalculateHourRateTest() проверяет правильность вычисления часовой ставки разработчика.

junitwritingtestfinalstructure

В результате работы данного теста, мы получим следующий результат:

junitwritingtestresult

На этом мы заканчиваем рассмотрение базовых принципов написания тестов.

В следующей статье мы рассмотрим использование утверждений в JUnit Framework.