Одна и та же ошибка при работающем коде

Здравствуйте!
Кто знает, подскажите пожалуйста, в каком направлении искать причину одной и той же ошибки в работающем коде. Всё дело в том, что пример писался на JUnit 4. Я изучаю по видео и как могу подстраиваю под JUnit 5. Вроде всё сделал. Но выдаёт такую ошибку. Весь код при компиляции нигде не цепляется, всё ровно.


Так а что в коде теста?

Это интерфейс.

package ru.csc.java2014.testing.demo3;

public interface Calculator
{
    public double calculate(String expression);
}

Это реализация

package ru.csc.java2014.testing.demo3;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.function.DoubleConsumer;
import java.util.stream.Stream;

public class CalculatorCli
{

    private final Calculator calculator;

    public CalculatorCli(Calculator calculator)
    {
        this.calculator = calculator;
    }

    public void runInteractiveSession(Reader reader)
    {
        runInteractiveSession(reader, System.out::println);
    }

    public void runInteractiveSession(Reader reader, DoubleConsumer resultConsumer)
    {
        new BufferedReader(reader).lines()
                .flatMap((s) -> Stream.of(s.split(";")))
                .filter((s) -> !s.trim().isEmpty())
                .mapToDouble(calculator::calculate)
                .forEach(resultConsumer);
    }

    public static void main(String[] args) throws Exception
    {
        CalculatorCli calculatorCli = new CalculatorCli(new CalculatorImpl());
        try (Reader reader = new InputStreamReader(System.in))
        {
            calculatorCli.runInteractiveSession(reader);
        }
    }
}

Это тесты

package ru.csc.java2014.testing.demo3;

import org.junit.jupiter.api.BeforeEach;
import org.testng.annotations.Test;
import org.mockito.Mockito;
import java.io.StringReader;
import static org.mockito.Mockito.*;

public class CalculatorCliTest
{

    private Calculator calculatorMock;
    private CalculatorCli calculatorCli;

    @BeforeEach
    void setUp()throws Exception
    {
        calculatorMock = Mockito.mock(Calculator.class);
        calculatorCli = new CalculatorCli(calculatorMock);
    }

    @Test
    void empty_expressions_must_be_skipped()
    {
        calculatorCli.runInteractiveSession(new StringReader(";\n;   ;;;\t\n;"));

        Mockito.verifyZeroInteractions(calculatorMock);/*verifyZeroInteractions) — он проверяет отсутствие каких-либо
         неверифицированных (то есть не подпадающих ни под один из выполненных до этого вызовов verify) обращений
         к моему mock-объекту — к любым его методам*/
    }


    @Test
    void each_expression_separated_by_semicolon_must_be_evaluated()
    {
        calculatorCli.runInteractiveSession(new StringReader("1;2;3;"));

        verify(calculatorMock).calculate("1");
        verify(calculatorMock).calculate("2");
        verify(calculatorMock).calculate("3");
        verifyNoMoreInteractions(calculatorMock);
    }


    @Test
    void each_expression_separated_by_semicolon_must_be_evaluated_2()
    {
        when(calculatorMock.calculate("1")).thenReturn(1d);//когда калькулятор вызывается с параметром "1" надо вернуть 1
        when(calculatorMock.calculate("2")).thenReturn(2d);
        when(calculatorMock.calculate("3")).thenReturn(3d);

        calculatorCli.runInteractiveSession(new StringReader("1;2;3;"));
        verify(calculatorMock).calculate("1");
        verify(calculatorMock).calculate("2");
        verify(calculatorMock).calculate("3");
        verifyNoMoreInteractions(calculatorMock);
    }
}

Это xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>ru.csc.java2014</groupId>
    <artifactId>testing</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.7.2.201409121644</version>
                <executions>
                    <execution>
                        <id>default-prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>default-report</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>compile</scope>
        </dependency>
        <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter</artifactId>
        <version>RELEASE</version>
        <scope>compile</scope>
        </dependency>


        <dependency>
            <groupId>org.easytesting</groupId>
            <artifactId>fest-assert-core</artifactId>
            <version>2.0M10</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>1.10.8</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>1.10.8</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>7.4.0</version>
        </dependency>


    </dependencies>

</project>

Это наверно стоит убрать, вроде бы где-то писалось про проблемы когда одновременно 4 и 5 подключены.

Убирал, не помогает. Я всегда стараюсь перепробовать все приходящие на ум варианты, и только потом обращаться за помощью)))
Я чего только не делал…)

это из 4.

в 5

import org.junit.jupiter.api.Test;
1 лайк

Разрази меня гром!
)))
Спасибо вам огромное.
Я чего только не перепробовал…
Материться хочется…)
Подскажите пожалуйста, где можно посмотреть все переходы по подобным различиям в import?

В 5 вроде бы всё в org.junit.jupiter...

Ну и тут написано что поменялось https://junit.org/junit5/docs/current/user-guide/#migrating-from-junit4

У меня теперь другая кручина)))
Тот проект был на jdk 1.8
Я сейчас сделал точную копию кроме pom-файла на jdk-16, с известной поправкой(спасибо вам), и что вы думаете? Тоже ошибка!
Вот xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>Test3</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
            <scope>provided</scope>
        </dependency>


        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.8.0-M1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
            <version>1.8.0-M1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.easytesting</groupId>
            <artifactId>fest-assert-core</artifactId>
            <version>2.0M10</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>1.10.8</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>1.10.8</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>7.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.8.0-M1</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>com.soebes.maven.plugins</groupId>
                <artifactId>uptodate-maven-plugin</artifactId>
                <version>0.2.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>dependency</goal>
                        </goals>
                        <phase>validate</phase>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>15</source>
                    <target>15</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.7.2.201409121644</version>
                <executions>
                    <execution>
                        <id>default-prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>default-report</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <properties>
        <maven.compiler.source>16</maven.compiler.source>
        <maven.compiler.target>16</maven.compiler.target>
    </properties>

</project>

Вот тест (реализация не трогалась)

package ru.csc.java2014.testing.demo3;

import org.junit.jupiter.api.BeforeEach;
//import org.testng.annotations.Test;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import java.io.StringReader;
import static org.mockito.Mockito.*;

public class CalculatorCliTest
{

    private Calculator calculatorMock;
    private CalculatorCli calculatorCli;

    @BeforeEach
    void setUp()throws Exception
    {
        calculatorMock = Mockito.mock(Calculator.class);
        calculatorCli = new CalculatorCli(calculatorMock);
    }

    @Test
    void empty_expressions_must_be_skipped()
    {
        calculatorCli.runInteractiveSession(new StringReader(";\n;   ;;;\t\n;"));

        Mockito.verifyZeroInteractions(calculatorMock);/*verifyZeroInteractions) — он проверяет отсутствие каких-либо
         неверифицированных (то есть не подпадающих ни под один из выполненных до этого вызовов verify) обращений
         к моему mock-объекту — к любым его методам*/
    }


    @Test
    void each_expression_separated_by_semicolon_must_be_evaluated()
    {
        calculatorCli.runInteractiveSession(new StringReader("1;2;3;"));

        verify(calculatorMock).calculate("1");
        verify(calculatorMock).calculate("2");
        verify(calculatorMock).calculate("3");
        verifyNoMoreInteractions(calculatorMock);
    }


    @Test
    void each_expression_separated_by_semicolon_must_be_evaluated_2()
    {
        when(calculatorMock.calculate("1")).thenReturn(1d);//когда калькулятор вызывается с параметром "1" надо вернуть 1
        when(calculatorMock.calculate("2")).thenReturn(2d);
        when(calculatorMock.calculate("3")).thenReturn(3d);

        calculatorCli.runInteractiveSession(new StringReader("1;2;3;"));
        verify(calculatorMock).calculate("1");
        verify(calculatorMock).calculate("2");
        verify(calculatorMock).calculate("3");
        verifyNoMoreInteractions(calculatorMock);
    }
}

То же самое за исключением того импорта… Тут в ошибке в основном мокито, но есть и что-то ещё

Слишком старая наверно.
Сейчас 3.11 GitHub - mockito/mockito: Most popular Mocking framework for unit tests written in Java

Верно, 2.25.0 работает
Спасибо.
А как влияет на javax.script.ScriptEngine.eval(String) 16 jdk?
Потому что выдает ошибку на него в другом тесте
java.lang.NullPointerException: Cannot invoke “javax.script.ScriptEngine.eval(String)” because “scriptEngine” is null
Это в реализации.

package ru.csc.java2014.testing.demo3;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class CalculatorImpl implements Calculator
{

  /*  @Override
    public double calculate(String expression)
    {
        return Double.parseDouble(expression);
    }
*/

    @Override
    public double calculate(String expression)
    {
        ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("nashorn");
        try
        {
            defineMathFunctions(scriptEngine);
            return ((Number) scriptEngine.eval(expression)).doubleValue();
        }
        catch (ScriptException e)
        {
            throw new IllegalArgumentException("Failed to evaluate expression", e);
        }
    }

    private static void defineMathFunctions(ScriptEngine scriptEngine) throws ScriptException
    {
        for (String function : new String[] {"sin", "cos", "sqrt"})
        {
            scriptEngine.eval("function " + function + "(x) { return Java.type('java.lang.Math')." + function + "(x); }");
        }
    }
}

Там реализуется калькулятор через него.

Так тут видимо просто нет этого Nashorn’a

Nashorn (JavaScript engine) - Wikipedia

With the release of Java 11, Nashorn is deprecated, and has been removed from JDK 15 onwards.

Да, он оказывается теперь не используется. Спасибо.