Ошибка при выполнении Java Модульный тест. Не удается импортировать пакеты, связанные с аннотацией "@Test" и методом "equalTo ()" - PullRequest
0 голосов
/ 11 апреля 2020

Пожалуйста, помогите мне. Я пытаюсь запустить модульный тест в коде Java (простой код, который я выполняю в рамках Java trainning), но мне не удается импортировать пакеты, связанные с аннотацией "@Test" и методом " equalTo () "в классе AccountTest (см. код ниже).

Вот информация о настройке:

  • Я пытался запустить этот код, используя IDE "Eclipse Java Oxygen" и "Eclipse IDE для Java Developers - 2020-03";
  • Я обновил JDK до версии 13 (я обновил системную переменную PATH, добавив каталог файлов "C: \ Program Files \ Java \ jdk-13.0.2 \ bin ");
  • Я использую JRE 1.8.0_241;
  • ОС: Windows 7 Professional;

Код модульного теста (здесь проблема), класс AccountTest:

public class AccountTest {

    @Test // Eclipse error reported: "Test cannot be resolved to a type". It does not offer to import the package related to the annotation "@Test"
    public void onWithdrawalBalanceShouldBeReduced() {
        Account account = new Account(200d);
        account.withdraw(50d);

        assertThat(account.getBalance(), is(equalTo(150d))); // Eclipse error reported: "The method equalTo(Double) is undefined for the type AccountTest". It does not offer to import the package related to method "equalTo()"
    }
}

Код для класса счета:

public class Account {

    private double balance;

    public Account(double balance) {
        this.balance = balance;
    }

    public void withdraw(double value) {
        this.balance = this.balance + value;
    }

    public void deposit(double valor) {
        this.balance = this.balance + valor;
    }

    public void setBalance(double saldo) {
        this.balance = saldo;
    }

    public double getBalance() {
        return balance;
    }
}

Код для класса банка:

public class Bank {

    public void deposit(Account account, double value) {
        account.deposit(value);
    }

    public void doTranference(Account account1, double value, Account account2) {
        account1.withdraw(value);
        account2.deposit(value);
    }
}

1 Ответ

0 голосов
/ 11 апреля 2020

Вы должны убедиться, что библиотека JUnit находится на вашем пути сборки. Ваша версия Eclipse имеет встроенные библиотеки JUnit3, JUnit4 и JUnit5.

Вы должны попытаться создать новый контрольный пример JUnit с помощью команды меню: File/New/JUnit Test Case и выбрать один из следующих параметров: New JUnit Test Case Dialog

  • Новый тест Junit3
  • Новый тест Junit4
  • Новый тест Junit Jupiter

Введите имя класса вашего теста (и пакета, если необходимо), нажмите кнопку Finish, и вы попадете в диалоговое окно, чтобы добавить соответствующую библиотеку JUnit в путь сборки. Add Junit4 library to the build path

Нажмите кнопку OK и затем вы можете добавить / отредактировать свой тестовый класс.

package my.task;

import static org.junit.Assert.assertEquals;

import org.junit.Test;

class AccountTest {

    @Test
    public void onWithdrawalBalanceShouldBeReduced() {
        Account account = new Account(200d);
        account.withdraw(50d);

        assertEquals("Account balance should be reduced to 150", 150d, account.getBalance(), 0.001);
    }
}

Обратите также внимание на следующие моменты:

  • метод withdraw в Account фактически не вычитает сумму снятия, и тест не пройден:
java.lang.AssertionError: Account balance should be reduced to 150 expected:<150.0> but was:<250.0>
    at org.junit.Assert.fail(Assert.java:89)
    at org.junit.Assert.failNotEquals(Assert.java:835)
    at org.junit.Assert.assertEquals(Assert.java:555)
    at my.task.AccountTest.onWithdrawalBalanceShouldBeReduced(AccountTest.java:14)
    ...
  • как правило, не рекомендуется использовать тип с плавающей запятой для баланса, поскольку это может привести к нежелательным ошибкам округления:)

  • , если вам действительно нужно использовать assertThat, и сопоставители подколенного сухожилия is() и equalTo, вам нужно исправить импорт:

package my.task;

import static org.hamcrest.MatcherAssert.assertThat; 
import static org.hamcrest.CoreMatchers.*;

import org.junit.Test;

public class AccountTest {

    @Test
    public void onWithdrawalBalanceShouldBeReduced() {
        Account account = new Account(200d);
        account.withdraw(50d);

        assertThat(account.getBalance(), is(equalTo(150d)));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...