使用该方法的运行时异常

时间:2015-04-03 23:23:18

标签: java

我已经完成了代码,并且所有测试用例都给了我正确的除了两个数组为空的情况,并且应该抛出一个运行时异常,并显示消息“空数组没有模式”。我的测试失败说:空输入应该产生一个RuntimeExcetpion,消息“空数组没有模式”。我已将其包含在代码中,但仍未通过这些测试用例。其中一个测试用例是:

@Test(timeout=2000) public void mode_empty1(){
    String msg;
    String expect = "Empty array has no mode";
    try{
      Mode.mode(new String[]{});
    }
    catch(RuntimeException e){
      String actual = e.getMessage();
      msg = String.format("\nRuntimeException has wrong message\nExpect: %s\nActual: %s\n",
                          expect,actual);
      assertEquals(msg,expect,actual);
      return;
    }
    msg = String.format("\nEmpty input should yield a RuntimException with message '%s'\n",
                        expect);
    fail(msg);
  }

Coulb smb请帮帮忙?

public class Mode {

    public static <T> Pair<T, Integer> mode(T items[])
    {
        try
            {

            if(items == null) throw new RuntimeException("Empty array has no mode");

            else
            {
                T element = items[0];
                int count = 0;

                for(int i = 0; i < items.length; i++)
                {
                    int tempCount = 0;
                    T tempElement = items[i];

                    for(int j = 0; j < items.length; j++)
                        {
                            if(tempElement.equals(items[j]))
                                tempCount++;
                        }   
                    if(tempCount > count)
                    {
                        count = tempCount;
                        element = tempElement;
                    }
                }
                return new Pair<T, Integer>(element, new Integer(count));
            }


        }

        catch(RuntimeException e)
        {
            System.out.println(e.getMessage()); 

        }


    return null;
}
}

2 个答案:

答案 0 :(得分:0)

条件if(items == null)测试数组是null,而不是它是否为空。但是当你执行Mode.mode(new String[]{})时,你传递的是一个空数组,而不是null

您可以通过执行以下操作来检查空数组:

if(items == null || items.length == 0) throw new RuntimeException("Empty array has no mode");

或者将null传递给Mode.mode()

Mode.mode(null)

由于您想要抓住RuntimeException以外的mode() try-catch,您不再需要public static <T> Pair<T, Integer> mode(T items[]) { if (items == null || items.length == 0) { throw new RuntimeException("Empty array has no mode"); } else { T element = items[0]; int count = 0; for(int i = 0; i < items.length; i++) { int tempCount = 0; T tempElement = items[i]; for(int j = 0; j < items.length; j++) { if (tempElement.equals(items[j])) { tempCount++; } } if (tempCount > count) { count = tempCount; element = tempElement; } } return new Pair<T, Integer>(element, new Integer(count)); } return null; } 区块了:

{{1}}

答案 1 :(得分:0)

您的生产代码会检查空输入,但您的测试代码会传入非空输入。

您应该更改测试代码以传入空输入:

Mode.mode(null);

或将生产代码中的条件更改为:

if(items.length == 0) throw ...

您可能想要检查生产代码中的无效和空白:

if(items == null || items.length == 0) throw ...

您还需要在try块之前移动此检查,因为您正在立即捕获抛出的异常。

if(items == null) throw new RuntimeException("Empty array has no mode");
try {
  ...
} catch (RuntimeException e) {
  ...
}