Java 为什么在向ArrayList添加项时会出现空指针异常

Java 为什么在向ArrayList添加项时会出现空指针异常,java,arraylist,junit,mockito,Java,Arraylist,Junit,Mockito,我的处方分类如下: import java.util.ArrayList; import java.util.List; public class Prescription { private final ArrayList<Product> prescriptionItems = new ArrayList<Product>(); private long prescriptionId; public List<Product

我的处方分类如下:

import java.util.ArrayList;
import java.util.List;

public class Prescription {

    private final ArrayList<Product> prescriptionItems = new     ArrayList<Product>();
    private long prescriptionId;

    public List<Product> getPrescriptionItems() {
        return prescriptionItems;
    }

    public void addPrescriptionItem(final Product product) {
        this.prescriptionItems.add(product);
    }
}
        @BeforeEach
    void setUp() throws Exception 
        {
            medAvailControllerImpl = new MedAvailControllerImpl(medAvailDAO, dispenser, paymentHandlerFactory);
        prescriptionProduct = new Product(789, 44.0);
        customer = new Customer(45678, "Amofa Baffoe", "Claregalway", "kbaffoe@hotmail.com", "paypal", paypalStrategy);
        when(medAvailDAO.getCustomerForId(45678)).thenReturn(customer);
    }

    @Test
    public void testOneItemOnPrescriptionSuccess() throws Exception {
        //prescriptionProduct = new Product(789, 44.0);
        prescriptionItems.add(prescriptionProduct);
            when(prescription.getPrescriptionItems()).thenReturn(prescriptionItems);

    }

我的测试设置如下:
我的设置方法如下:

import java.util.ArrayList;
import java.util.List;

public class Prescription {

    private final ArrayList<Product> prescriptionItems = new     ArrayList<Product>();
    private long prescriptionId;

    public List<Product> getPrescriptionItems() {
        return prescriptionItems;
    }

    public void addPrescriptionItem(final Product product) {
        this.prescriptionItems.add(product);
    }
}
        @BeforeEach
    void setUp() throws Exception 
        {
            medAvailControllerImpl = new MedAvailControllerImpl(medAvailDAO, dispenser, paymentHandlerFactory);
        prescriptionProduct = new Product(789, 44.0);
        customer = new Customer(45678, "Amofa Baffoe", "Claregalway", "kbaffoe@hotmail.com", "paypal", paypalStrategy);
        when(medAvailDAO.getCustomerForId(45678)).thenReturn(customer);
    }

    @Test
    public void testOneItemOnPrescriptionSuccess() throws Exception {
        //prescriptionProduct = new Product(789, 44.0);
        prescriptionItems.add(prescriptionProduct);
            when(prescription.getPrescriptionItems()).thenReturn(prescriptionItems);

    }

我的JUnit/Mockito测试如下:

import java.util.ArrayList;
import java.util.List;

public class Prescription {

    private final ArrayList<Product> prescriptionItems = new     ArrayList<Product>();
    private long prescriptionId;

    public List<Product> getPrescriptionItems() {
        return prescriptionItems;
    }

    public void addPrescriptionItem(final Product product) {
        this.prescriptionItems.add(product);
    }
}
        @BeforeEach
    void setUp() throws Exception 
        {
            medAvailControllerImpl = new MedAvailControllerImpl(medAvailDAO, dispenser, paymentHandlerFactory);
        prescriptionProduct = new Product(789, 44.0);
        customer = new Customer(45678, "Amofa Baffoe", "Claregalway", "kbaffoe@hotmail.com", "paypal", paypalStrategy);
        when(medAvailDAO.getCustomerForId(45678)).thenReturn(customer);
    }

    @Test
    public void testOneItemOnPrescriptionSuccess() throws Exception {
        //prescriptionProduct = new Product(789, 44.0);
        prescriptionItems.add(prescriptionProduct);
            when(prescription.getPrescriptionItems()).thenReturn(prescriptionItems);

    }


我在
prescriptionItems
添加到
prescriptionProduct
的位置获得
NullPointerException
。有什么帮助吗?

我尝试在我的计算机中复制您的代码,它成功了,添加了一个产品,并使用
List getprescriptionims()
完美地返回了它

import java.util.ArrayList; 
import java.util.List;

class Product {
    public Product(final long productCode, final double productCost) {
        this.productCode = productCode;
        this.productCost = productCost;
    }


    private final long productCode;
    private final double productCost;

    public long getProductCode() {
        return productCode;
    }

      public double getProductCost() {
        return productCost;
      }
}  
public class Prescription {

    private final ArrayList<Product> prescriptionItems = new ArrayList<Product>();
    private long prescriptionId;

    public List<Product> getPrescriptionItems() {
        return prescriptionItems;
    }

    public void addPrescriptionItem(final Product product) {
        this.prescriptionItems.add(product);
    }


    public static void main(String[] args) {

        // instantiate Prescription
        Prescription pres = new Prescription();

        // add a product to ArrayList using addPrescriptionItem()
        pres.addPrescriptionItem(new Product(50, 15.0));

        // get the product details from the ArrayList
        Product product = pres.getPrescriptionItems().get(0);

        System.out.println(product.getProductCode()+ " " + product.getProductCost()); // will print "name in sup Class"
    }
}
import java.util.ArrayList;
导入java.util.List;
类产品{
公共产品(最终长产品代码、最终双产品成本){
this.productCode=productCode;
this.productCost=productCost;
}
私有最终长代码;
私人最终双重生产成本;
公共长getProductCode(){
返回产品代码;
}
公共双getProductCost(){
退货成本;
}
}  
公营处方{
private final ArrayList ems=新ArrayList();
私人长处方;
公共列表getems(){
返回处方;
}
公共无效处方药(最终产品){
本.处方.添加(产品);
}
公共静态void main(字符串[]args){
//例举处方
处方压力=新处方();
//使用addPrescriptionItem()将产品添加到ArrayList
新产品(50,15.0);
//从ArrayList获取产品详细信息
Product Product=pres.getms().get(0);
System.out.println(product.getProductCode()+“”+product.getProductCost());//将打印“sup类中的名称”
}
}
以下是输出:

尝试初始化MS ArrayList:

private ArrayList <Product> prescriptionItems;
private ArrayList处方;

private ArrayList=new ArrayList();
当您在测试代码中声明它时


顺便问一下,如果要通过addPrescriptionItem方法在prescription类中测试添加产品,为什么要为产品添加新的ArrayList,该方法将产品添加到已在prescription类中定义的ArrayList中

Tnx用于快速响应。这个测试对你有用吗?public void testOneItemOnPrescriptionSuccess()引发异常{prescriptionProduct=新产品(789,44.0);prescriptionItems.add(prescriptionProduct);when(prescription.getPrescriptionItems())。然后返回(prescriptionItems);这应该作为评论而不是答案发布。我试图将其作为评论发布,但显然不行,我仍然有11个声誉。哦……不用担心……继续贡献……祝你成功!当我这样做时,收到空指针异常:prescriptionProduct=新产品(789,44.0);prescriptionItems.add(prescriptionProduct);@AmofaBaffoe我刚刚像您一样添加了该产品,//实例化处方pres=new Prescription();pres.addPrescriptionItem(新产品(50,15.0));就像我在上面发送的代码中显示的那样,它起了作用。没有引发null异常。