编译Java代码时出现'The method is undefined for the type'错误的解决求助
解决Gradle构建报错:createGreeting方法未定义问题
问题描述
克隆主管的Java代码后,在src/test/java目录编写完Greeting.java,运行时Gradle构建失败,报错信息:
"message": "The method createGreeting(String) is undefined for the type Greeting"
尝试注释测试类中报错代码行后出现更多错误,参考Stack Overflow方案修改也未解决,目标是实现无错误构建并提交到GitHub。
现有代码
GreetingTest.java
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); } }
解决方案
问题根源有两个:
Greeting类未实现测试类中调用的实例方法createGreeting(String)main方法的输出格式和测试预期不符(测试期望Hello, Alice!,当前输出是Hello Alice)
修改后的Greeting.java代码如下:
import java.util.Scanner; public class Greeting { // 实现测试类需要的createGreeting实例方法 public String createGreeting(String name) { return "Hello, " + name + "!"; } public static void main(String[] args) { Scanner userInput = new Scanner(System.in); System.out.println("Please enter your first name : "); String userName = userInput.next(); // 调用createGreeting方法统一输出格式,避免重复逻辑 System.out.println(new Greeting().createGreeting(userName)); } }
验证说明
修改后:
testCreateGreeting测试会成功调用createGreeting方法,返回符合预期的字符串testMainOutput测试会捕获到包含Hello, Alice!的控制台输出,满足断言条件- 执行Gradle构建命令
./gradlew build(Windows环境用gradlew.bat build)即可成功完成构建
内容的提问来源于stack exchange,提问作者Eben Nexer
相关产品推荐
相关产品推荐

