【问题标题】:how to test for an thrown IllegalArgumentException [duplicate]如何测试抛出的 IllegalArgumentException [重复]
【发布时间】:2017-12-26 18:21:55
【问题描述】:

我正在大学做一个项目,我要在其中创建自己的对象,以及私有数据、方法等。这不是一个具有用户界面的完整工作系统;这只是一个创建类,然后实例化和测试它们的机会。

问题是我正在尝试创建一个测试方法,该方法在名为 DinetteStore 的构造函数中测试抛出的 IllegalArgumentException:

public DinetteStore(int tableInventory, int chairInventory, int leafInventory){
       if (tableInventory < 0 || leafInventory < 0 || chairInventory < 0){
           throw new IllegalArgumentException ("Inventory must not be out of range of required order");
        }

       this.tableInventory = tableInventory;
       this.chairInventory = chairInventory;
       this.leafInventory = leafInventory;
       this.totalSales = 0;
       this.numSales = 0;
   }

这里列出了测试类中的代码:

@Test (expected = IllegalArgumentException.class) 
    public void testIllegalArgumentChair() {
        int tableInventory = -1 || int leafInventory = -1 || chairInventory = -1;

    }

我遇到了一个问题,即出现 .class 预期错误或非法开始表达式错误。我使用的 IDE 是 BlueJ 4.1.0 这里有什么我在语法方面遗漏的东西吗?任何帮助都将不胜感激。

【问题讨论】:

    标签: java unit-testing junit illegalargumentexception


    【解决方案1】:

    您没有实例化class,它会抛出exception。而且你的语法不正确,应该是这样的:

    @Test (expected = IllegalArgumentException.class) 
    public void testIllegalArgumentChair() {
            DinetteStore  willFail = new DinetteStore(-1, -1, -1);
    }
    

    【讨论】:

      【解决方案2】:

      您的测试类的格式很奇怪。您正在尝试使用非法参数实例化 DinetteStore,所以您想要:

      @Test (expected = IllegalArgumentException.class) 
      public void testIllegalArgumentChair() {
          int tableInventory = -1;
          int leafInventory = -1;
          int chairInventory = -1;
          DinetteStore creationWillFail = new DinetteStore(tableInventory, 
                                                           leafInventory, 
                                                           chairInventory);
      }
      

      【讨论】:

        【解决方案3】:
        @Test (expected = IllegalArgumentException.class) 
        public void testIllegalArgumentChair() {
            DinetteStore d = new DinetteStore(-1,-1,-1);
        }
        

        在测试中你必须调用会抛出异常的方法,否则你永远不会得到预期的异常

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-11-19
          • 2016-07-13
          • 2020-06-22
          • 2018-12-10
          • 1970-01-01
          • 2018-05-17
          • 1970-01-01
          • 2014-09-18
          相关资源
          最近更新 更多