Может ли кто-нибудь помочь мне правильно настроить Junit? Моя программа не компилируется

Мой код:

import org.junit.Test;
import static org.junit.Assert.*;

public class AListTest {
    @Test
    public void testEmptySize() {
        AList L = new AList();
        assertEquals(0, L.size());
    }

    @Test
    public void testAddAndSize() {
        AList L = new AList();
        L.addLast(99);
        L.addLast(99);
        assertEquals(2, L.size());
    }
    ...rest of testing
}

В мои зависимости включены как junit 4.13.2, так и jupiter 5.9.1, потому что я не знал, какой пакет включить в структуру/зависимости моего проекта. Кстати, я слежу за этим классом и пытаюсь следовать командам в этой части этого видео... Команды, которые я пытаюсь запустить:

javac *.java

-and also-

time java speedtestAList 

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

AListTest.java:1: error: package org.junit does not exist
import org.junit.Test;
                ^
AListTest.java:2: error: package org.junit does not exist
import static org.junit.Assert.*;
                       ^
SpeedTestSLList.java:1: error: package org.junit does not exist
import org.junit.Test;
                ^
AListTest.java:9: error: cannot find symbol
    @Test
     ^
  symbol:   class Test
  location: class AListTest
AListTest.java:15: error: cannot find symbol
    @Test
     ^
  symbol:   class Test
  location: class AListTest
AListTest.java:24: error: cannot find symbol
    @Test
....on like that through my file

Я не знаю, почему для меня тестирование всегда так тяжело. Обычно я использую C#, а Xunit и moq тоже доставляют мне столько хлопот. Может ли кто-нибудь помочь мне понять, что я делаю неправильно?

Я пробовал включать различные зависимости и использовать AI для устранения неполадок. Я обратился к паре друзей, которые пока не смогли помочь. Я, конечно, гуглил. Я пытался пересобрать проект каждый раз, когда менял зависимости. Я попытался «аннулировать кеши» в intellij.

Вы не показали/объяснили, как именно вы добавили зависимости. Я бы действительно предложил использовать Maven или Gradle для управления вашим проектом, как описано ниже (и см. ссылки в ответе на их документацию).

ndc85430 01.08.2024 06:34

Я решил это сейчас, запустив javac -classpath <path_to_junit.jar>:/your_system_libraries *.java, и мне действительно пришлось находиться в WSL, чтобы запустить тестовую команду, которую я пытался. Меня все еще очень смущает, что такое maven и gradle. Это компании? Это фреймворк типа реакции или что-то в этом роде?

user23641408 01.08.2024 06:36

Вы читали какую-нибудь их документацию? Короче говоря, это инструменты, которые управляют структурой проекта, сборкой (например, компиляцией и запуском тестов) и упаковкой (например, созданием JAR-файла) и зависимостями третьих сторон.

ndc85430 01.08.2024 06:43
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам необходимо добавить файл .jar для JUnit в процесс сборки и выполнения.

javac -classpath <path_to_junit.jar>:/your_system_libraries *.java

затем (при условии, что где-то определен void main(String args[]), который выполняет тесты junit, в противном случае вам нужно вызвать другой механизм выполнения)

java -classpath .:<path_to_junit.jar>:/your_system_libraries AListTest

На практике никто не выполняет подобные действия в командной строке. Практически каждый использует конфигурацию maven или gradle для управления процессом сборки и выполнения, так что вам не придется беспокоиться об управлении загрузками, путями к классам, версиями и прочим.

После установки maven вы можете добавить конфигурацию, которая выглядит следующим образом, чтобы указать, что вы хотите использовать junit:

<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.2</version>
    <scope>test</scope>
</dependency>

который инструктирует maven добавить это в сборку (в данном случае, как отмечено в файле scope.

Тогда сборка и выполнение станут намного проще:

mvn package
mvn test

Я рекомендую один из следующих инструментов:

Есть и другие, но, по моему опыту, чаще всего используются эти два.

Честно говоря, я не очень понимаю многое из того, что вы написали. Какое-то время меня смущало тестирование, но я не хочу сдаваться... Я просто не понимаю всех этих взаимозависимостей. Что такое jar-файл? Я сам это пишу? Я также не знаю, что такое путь к классам. Можете ли вы объяснить, что такое механизм выполнения? Что такое maven и gradle? и что такое конфигурация? Куда мне добавить код, который вы указали? Как установить мавен? Это через intellij или в Java или что-то в этом роде?

user23641408 01.08.2024 05:24

Попробуйте ссылки на руководства, которые я положил внизу. Это поможет вам приступить к рабочей настройке. Maven немного проще понять.

PaulProgrammer 01.08.2024 06:35

Файлы Jar представляют собой версию упакованного кода Java, например сборки в C# или файлы .so в Linux C/C++. В мире Java вы будете доставлять упакованные банки (или аналогичные, в зависимости от ваших требований). Путь к классам — это базовая конструкция, которая сообщает Java, где найти jar-файлы и классы, которые он использует во время выполнения. Механизм выполнения похож на makefile, maven, gradle, cmake или любой другой механизм сборки. Я действительно думаю, что вам следует пройти обучение шаг за шагом, а не пытаться пропустить его до конца.

PaulProgrammer 01.08.2024 06:38

Документация все еще кажется мне очень загадочной после прочтения их веб-сайта. Возможно, мне просто не хватает знаний или чего-то еще. «Maven, идишское слово, означающее аккумулятор знаний, началось как попытка упростить процессы сборки в проекте Jakarta Turbine. JAR-файлы были проверены в CVS. Нам нужен был стандартный способ сборки проектов, четкое определение того, что представляет собой проект. состоял из простого способа публикации информации о проекте и способа совместного использования JAR-файлов между несколькими проектами. Результатом стал инструмент, который теперь можно использовать для создания и управления любым проектом на основе Java...».

user23641408 01.08.2024 06:41

Я не знаю, что это такое. Джакартский проект? Что значит «строить»? Я скомпилировал программы, но не знаю, что означает создание программы. Является ли CVS тем же самым, что и система контроля версий? Разве публикация не просто продвигает GitHub?

user23641408 01.08.2024 06:42

Чтобы стать новым программистом, нужно сделать много шагов. Рекомендую читать обучающие материалы, а не только первый абзац главной страницы. Начните здесь: maven.apache.org/guides/getting-started/…

PaulProgrammer 01.08.2024 06:45

Я пытаюсь научиться чему-то одному; и я хочу научиться использовать junit и test, а человек, преподающий в классе, вообще не упомянул maven/gradle, и прежде чем я потрачу время на вложение энергии в изучение того, как использовать эти вещи, мне хотелось бы понять, для чего они используются. .\Я также прочитал другие страницы, но все они относительно одинаково загадочны, и все это похоже на то, что делает intellij и для чего предназначена IDE. Однако ваше первое решение в конце концов сработало для меня!!! Поэтому я очень благодарен за вашу помощь и в конечном итоге постараюсь узнать, что такое maven и gradle.

user23641408 01.08.2024 06:56

О да. Что ж, IDE полезна для вас как для разработчика, но в команде вам нужен повторяемый процесс, для чего и нужен maven. Желаю вам удачи в учебе!

PaulProgrammer 01.08.2024 18:19

Другие вопросы по теме