Я клонировал код супервизора на Java из GitHub, который поставляется с некоторым файлом Greeting.test и другими файлами, и после того, как я закончил писать код Greeting.java в src/test/java и запустил код, я продолжаю получать сообщение, в котором говорится:
"message": "The method createGreeting(String) is undefined for the type Greeting"
Это сообщение, связанное с ошибкой сборки graddle, и я понимаю, как я могу решить эту проблему, чтобы при фиксации кода в github не было ошибок?
Я пытался прокомментировать строки в Greeting.test, которые генерировали ошибку, но это даже принесло больше ошибок, а также я пытался использовать некоторые другие решения при переполнении стека, например добавление класса Greeting за методом, который инициирует createGreeting, но это все равно не удалось. работа. Я ожидал, что это обеспечит успешное строительство, но этого не произошло.
Это коды Greeting.test
import org.junit.jupiter.api.Test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class GreetingTest {
@Test
public void testCreateGreeting() {
Greeting greeting = new Greeting();
String name = "Alice";
assertEquals("Hello, Alice!", greeting.createGreeting(name), "Greeting message should match expected output.");
}
@Test
public void testMainOutput() {
ByteArrayInputStream in = new ByteArrayInputStream("Alice\n".getBytes());
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setIn(in);
System.setOut(new PrintStream(out));
String[] args = {};
Greeting.main(args);
String consoleOutput = out.toString();
assertTrue(consoleOutput.contains("Hello, Alice!"), "The output should contain the correct greeting.");
}
}
и это коды для класса Greeting.java, который я создал:
import java.util.Scanner;
public class Greeting {
public static void main(String[] args) {
Scanner userInput = new Scanner(System.in);
System.out.println("Please enter your first name : ");
String userName = userInput.next();
System.out.println("Hello " + userName);
}
}
Спасибо @JoachimSauer, я попытался отформатировать свой вопрос в соответствии с рекомендациями.
@MaximePillier, это правда, что метод createGreeting() отсутствует в Java, но именно так он был подготовлен нашим инструктором в исходном репозитории GitHub, который нам было поручено клонировать и просто создать для этой цели еще один класс «Приветствие». принимать введенные пользователем данные и отображать их пользователю как «Привет, пользователь». Я только новичок в написании Java-программ и не могу понять, где мне следует разместить такой метод.
Проблема связана не с graddle, а скорее с Java docs.oracle.com/javase/tutorial/java/javaOO/methods.html. Возможно, вам стоит отредактировать заголовок вопроса
Вы можете просто добавить необходимый метод createGreeting
рядом с методом ... main(...)
в классе Greeting
, например.
public class Greeting {
// a `static` method which can be called without an instance of `Greeting`
public static void main(String[] args) {
// current code
}
// an instance method which needs an instance to be called => `new Greeting()`
public String createGreeting(String value) {
// do whats ever necessary to fullfill the assert in the test
}
}
Если вы создаете новый класс Greeting
, вы можете опустить метод main
. Альтернативно вы можете заменить метод main
в существующем классе Greeting
и добавить метод createGreeting
. Для модульных тестов метод main
не обязателен.
Кажется, что метод createGreeting() отсутствует в классе Greeting.java, поэтому у вас возникает ошибка.