You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译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);

    }
}

解决方案

问题根源有两个:

  1. Greeting类未实现测试类中调用的实例方法createGreeting(String)
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 19:47:36