Java Junit测试5(异常)

Java Junit测试5(异常),java,junit,junit5,Java,Junit,Junit5,我正在做一个Junit测试,在其中一个测试中我遇到了问题,但我不明白为什么 您不必允许在任何给定时间将更多对象添加到列表中,即列表的大小大于5,简言之,如果我将第六个对象添加到列表中,则必须跳过异常,但我不理解它不起作用的原因,我保留我正在做的代码 代码: 我看不清楚发生了什么。我非常怀疑Java类ArrayList是否会引发您描述的异常: List<Tank> NumTanques = new ArrayList<Tank>(); 所以,如果您希望抛出该异常,您可能需

我正在做一个Junit测试,在其中一个测试中我遇到了问题,但我不明白为什么

您不必允许在任何给定时间将更多对象添加到列表中,即列表的大小大于5,简言之,如果我将第六个对象添加到列表中,则必须跳过异常,但我不理解它不起作用的原因,我保留我正在做的代码

代码:


我看不清楚发生了什么。

我非常怀疑Java类ArrayList是否会引发您描述的异常:

List<Tank> NumTanques = new ArrayList<Tank>();

所以,如果您希望抛出该异常,您可能需要使用一个自定义类来跟踪添加的坦克,而不是使用普通的ArrayList。也许从查找实际抛出KeeperException的代码开始。

我非常怀疑Java类ArrayList是否会像您描述的那样抛出异常:

List<Tank> NumTanques = new ArrayList<Tank>();

所以,如果您希望抛出该异常,您可能需要使用一个自定义类来跟踪添加的坦克,而不是使用普通的ArrayList。也许可以从查找实际抛出KeeperException的代码开始。

list.add只抛出此处提到的异常

所以,我们希望前面提到的这行代码会给您带来编译错误

如果您仍然想在list.add上断言,那么使用java文档中提到的任何异常

可能是这样的-

UnsupportedOperationException e= assertThrows(UnsupportedOperationException.class,()->NumTanques.add(tank6));

list.add仅抛出此处提到的异常

所以,我们希望前面提到的这行代码会给您带来编译错误

如果您仍然想在list.add上断言,那么使用java文档中提到的任何异常

可能是这样的-

UnsupportedOperationException e= assertThrows(UnsupportedOperationException.class,()->NumTanques.add(tank6));
为什么Arraylist会在添加任何内容时抛出和异常。它有自己的算法来管理加法

您需要做的是在服务类中添加一个方法,可能是KeeperService.java

然后抛出异常。 差不多

@sneakyThrows
public void countKeeperCheck(Object o){

List<Tank> NumTanques = new ArrayList<Tank>();
NumTanques.add(o);

if(listOfBanks.size() >5){
throw new KeeperException("write whatever here")
}
}

//add to try/catch if you have specific things to handle
您可以从测试中调用该方法。您不能在测试中编写业务逻辑。通过测试,您可以调用保存业务逻辑的方法

--------在注释和详细代码之后编辑---------

public void addTank(List<Tank> tank) throws KeeperException{// in the comment you add wrong signature, method should accept List, the only you will have contains operation

        if(tanks.size()>=5){
        throw new KeeperException(KeeperException.MSG_ERR_MAX_TANKS);
        }

        if(!tanks.contains(tank)){
            tanks.add(tank);
    }
}


// and this is how your test will look like
@Test
 void testAddTank() throws KeeperException, TankException {
         List<Tank> NumTanques = new ArrayList<Tank>();

        Tank tank1 = new Tank("TANQUE1","pedro1","hola",3.0,2.0,1.0,"/image",17.0,7);
        Tank tank2 = new Tank("TANQUE2","pedro2","hola",3.0,2.0,1.0,"/image",17.0,7);
        Tank tank3 = new Tank("TANQUE3","pedro3","hola",3.0,2.0,1.0,"/image",17.0,7);
        Tank tank4 = new Tank("TANQUE4","pedro4","hola",3.0,2.0,1.0,"/image",17.0,7);
        Tank tank5 = new Tank("TANQUE5","pedro5","hola",3.0,2.0,1.0,"/image",17.0,7);
        Tank tank6 = new Tank("TANQUE6","pedro6","hola",3.0,2.0,1.0,"/image",17.0,7);

        NumTanques.add(tank1);
        NumTanques.add(tank2);
        NumTanques.add(tank3);
        NumTanques.add(tank4);
        NumTanques.add(tank5);


        KeeperException excepcionTanques = assertThrows(KeeperException.class,()->yourServiceClass.addTank(tank6));
        assertEquals("[ERROR] A keeper cannot care of more than 5  thanks!!",excepcionTanques.MSG_ERR_MAX_TANKS);
        }
以您想要的方式声明您的ServiceClass。

为什么Arraylist会在您添加任何内容时抛出和异常。它有自己的算法来管理加法

您需要做的是在服务类中添加一个方法,可能是KeeperService.java

然后抛出异常。 差不多

@sneakyThrows
public void countKeeperCheck(Object o){

List<Tank> NumTanques = new ArrayList<Tank>();
NumTanques.add(o);

if(listOfBanks.size() >5){
throw new KeeperException("write whatever here")
}
}

//add to try/catch if you have specific things to handle
您可以从测试中调用该方法。您不能在测试中编写业务逻辑。通过测试,您可以调用保存业务逻辑的方法

--------在注释和详细代码之后编辑---------

public void addTank(List<Tank> tank) throws KeeperException{// in the comment you add wrong signature, method should accept List, the only you will have contains operation

        if(tanks.size()>=5){
        throw new KeeperException(KeeperException.MSG_ERR_MAX_TANKS);
        }

        if(!tanks.contains(tank)){
            tanks.add(tank);
    }
}


// and this is how your test will look like
@Test
 void testAddTank() throws KeeperException, TankException {
         List<Tank> NumTanques = new ArrayList<Tank>();

        Tank tank1 = new Tank("TANQUE1","pedro1","hola",3.0,2.0,1.0,"/image",17.0,7);
        Tank tank2 = new Tank("TANQUE2","pedro2","hola",3.0,2.0,1.0,"/image",17.0,7);
        Tank tank3 = new Tank("TANQUE3","pedro3","hola",3.0,2.0,1.0,"/image",17.0,7);
        Tank tank4 = new Tank("TANQUE4","pedro4","hola",3.0,2.0,1.0,"/image",17.0,7);
        Tank tank5 = new Tank("TANQUE5","pedro5","hola",3.0,2.0,1.0,"/image",17.0,7);
        Tank tank6 = new Tank("TANQUE6","pedro6","hola",3.0,2.0,1.0,"/image",17.0,7);

        NumTanques.add(tank1);
        NumTanques.add(tank2);
        NumTanques.add(tank3);
        NumTanques.add(tank4);
        NumTanques.add(tank5);


        KeeperException excepcionTanques = assertThrows(KeeperException.class,()->yourServiceClass.addTank(tank6));
        assertEquals("[ERROR] A keeper cannot care of more than 5  thanks!!",excepcionTanques.MSG_ERR_MAX_TANKS);
        }

按照您想要的方式声明您的ServiceClass。

错误是什么?@JavaTechnical当我通过junitTest时,它会在那一行阻止我,因为它不允许列表中的第六个元素,所以它确实应该抛出keeperException。列表中的项目不能超过5项。错误是什么?@JavaTechnical当我通过junitTest时,它会在该行阻止我,当它确实应该抛出keeperException时,因为它不应该允许列表中的第六个元素。列表中不能超过5项。在我的keeper类中,我已经在addtank方法中控制了它,但我不知道如何使用junit进行测试。在keeper类中,addtank方法是这样做的:public void addtank抛出KeeperException{if tanks.contains Tank{Tank=null;}if tanks.size 5{抛出新的KeeperException KeeperException.MSG_ERR_MAX_tanks;}编码的第一条规则“永不复杂化”。我已经重构了你的方法。请重复使用。总是在第一次提问时添加细节。这应该如何工作?您仍然向列表中添加了5个坦克,并且只调用了一次addTank,并且使用了错误的参数,这样甚至无法编译?在我的keeper类中,我已经在addTank方法中控制了它,但我不知道如何使用junit进行测试。在keeper类中,addtank方法是这样做的:public void addtank抛出KeeperException{if tanks.contains Tank{Tank=null;}if tanks.size 5{抛出新的KeeperException KeeperException.MSG_ERR_MAX_tanks;}编码的第一条规则“永不复杂化”。我已经重构了你的方法。请重复使用。总是在第一次提问时添加细节。这应该如何工作?您仍然向列表中添加了5个坦克,并且只调用了一次addTank,并且使用了错误的参数,因此甚至无法编译?