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

Java中Getter/Setter及方法可用性检查报错求助

排查并解决FruitBasket测试报错的方案

问题描述

这是我第一次在StackOverflow发帖,还在适应格式,提前致歉。我拥有FruitBasket和FruitBasketUtility两个类,已在FruitBasket.java中实现Getter和Setter方法,代码编译正常,但出现如下错误:
Fail 1 -- test11addToBasketMethodToAddOneFruitBasketObject::
Check the availability (or) the signature of addToBasket/getFruitBasketList in the FruitBasketUtility class or Setters and Getters in FruitBasket class

相关代码

Main.java

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        //For reading input from user
        Scanner in = new Scanner(System.in);
        
        //Creating object of FruitBasketUtility
        FruitBasketUtility fruitBasketUtility = new FruitBasketUtility();

        int choice;
        do{
            //Displaying the menu
            System.out.println("Select an option:");
            System.out.println("1. Add Fruit to Basket");
            System.out.println("2. Calculate Bill");
            System.out.println("3.Exit");

            //Reading the choice
            choice = in.nextInt();
            in.nextLine();

            switch(choice){
                case 1:
                    //Reading fruit details from user
                    System.out.println("Enter the fruit name");
                    String fruitName = in.next();
                    in.nextLine();
                    
                    System.out.println("Enter weight in Kgs");
                    int weightInKgs = in.nextInt();
                    in.nextLine();

                    System.out.println("Enter price per Kg");
                    int pricePerKg = in.nextInt();
                    in.nextLine();

                    FruitBasket fruit = new FruitBasket(fruitName, weightInKgs, pricePerKg);

                    //Adding fruit to basket
                    fruitBasketUtility.addToBasket(fruit);
                    break;
                case 2:
                    //Calculating and showing the bill
                    ArrayList<FruitBasket> basket = fruitBasketUtility.getFruitBasketList();
                    if(basket.size() > 0){
                        System.out.println("The estimated bill amount is Rs " + fruitBasketUtility.calculateBill((basket.stream())));
                    }
                    else{
                        System.out.println("Your basket is empty. Please add fruits.");
                    }
                    break;
                case 3:
                    System.out.println("Thank you for using the application.");
                    break;
                default:
                    System.out.println("Invalid option. Please try again.");
                    break;
            }

        }while(choice != 3);
    }
}

FruitBasket.java

public class FruitBasket {
    //Member variables
    String fruitName;
    int weightInKgs;
    int pricePerKg;

    //Getters and setters
    public void setFruitName(String fruitName){
        this.fruitName =fruitName;
    }

    public void setWeightInKgs(int weightInKgs){
        this.weightInKgs =weightInKgs;
    }

    public void setPricePerKg(int pricePerKg){
        this.pricePerKg =pricePerKg;
    }

    public String getFruitName(){
        return fruitName;
    }

    public int getWeightInKgs(){
        return weightInKgs;
    }

    public int getPricePerKg(){
        return pricePerKg;
    }

    //An empty constructor
    public FruitBasket(){
        fruitName = "";
        weightInKgs = 0;
        pricePerKg = 0;
    }

    //Three argument constructor
    public FruitBasket(String fruitName, int weightInKgs, int pricePerKg){
        this.fruitName = fruitName;
        this.weightInKgs = weightInKgs;
        this.pricePerKg = pricePerKg;
    }
}

FruitBasketUtility.java

import java.util.ArrayList;
import java.util.stream.Stream;

public class FruitBasketUtility {
    //Member variables
    ArrayList<FruitBasket> fruitBasketList;

    //Getters and setters
    public void setFruitBasketList(ArrayList<FruitBasket> fruitBasketList){
        this.fruitBasketList = fruitBasketList;
    }

    public ArrayList<FruitBasket> getFruitBasketList(){
        return fruitBasketList;
    }

    //Constructor
    public FruitBasketUtility(){
        fruitBasketList = new ArrayList<>();
    }

    //Add to basket
    public void addToBasket(FruitBasket fObj){
        fruitBasketList.add(fObj);
    }

    //Calculte the bill using stream of FruitBasket
    public int calculateBill(Stream<FruitBasket> fruitBasketStream){
        return fruitBasketStream.mapToInt(x -> x.getPricePerKg() * x.getWeightInKgs()).sum();
    }
}

排查与解决步骤

  1. 核对方法签名一致性
    测试用例报错指向addToBasket或getFruitBasketList的签名问题,重点检查:

    • addToBasket方法:当前代码是public void addToBasket(FruitBasket fObj),确保测试用例调用时传入的参数类型为FruitBasket,且方法修饰符为public(当前代码已满足)。
    • getFruitBasketList方法:当前返回ArrayList<FruitBasket>,如果测试用例期望的是父接口List<FruitBasket>,部分严格框架会判定不匹配。可以修改返回类型为List<FruitBasket>,同时把成员变量也声明为List<FruitBasket>,保持上下一致:
      // 修改FruitBasketUtility的成员变量和Getter
      List<FruitBasket> fruitBasketList;
      
      public List<FruitBasket> getFruitBasketList(){
          return fruitBasketList;
      }
      
  2. 验证Getter方法的可访问性
    虽然你的getPricePerKg、getWeightInKgs等都是public,但要确认测试用例是否能正常访问——比如类是否在同一包下,有没有误改访问修饰符。

  3. 确认初始化逻辑无问题
    检查FruitBasketUtility的构造函数是否正确初始化了fruitBasketList,当前代码里fruitBasketList = new ArrayList<>()是正确的,避免测试时出现空指针导致测试用例失败。

  4. 手动验证核心逻辑
    写一段简单的测试代码验证addToBasket和getFruitBasketList的功能:

    public static void testAddFunction() {
        FruitBasketUtility util = new FruitBasketUtility();
        FruitBasket testFruit = new FruitBasket("Banana", 3, 50);
        util.addToBasket(testFruit);
        // 输出应为1,说明添加成功
        System.out.println("Basket size after add: " + util.getFruitBasketList().size());
    }
    

    如果这段代码输出1,说明你的方法逻辑没问题,那大概率是测试用例的校验点不匹配,比如方法名拼写错误(比如测试用例找的是addToBasketList而非addToBasket)。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 15:24:19