Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Junit-预期会引发异常,但不会引发任何异常_Java_Exception_Junit - Fatal编程技术网

Java Junit-预期会引发异常,但不会引发任何异常

Java Junit-预期会引发异常,但不会引发任何异常,java,exception,junit,Java,Exception,Junit,预期会引发异常,但不会引发任何异常,从而导致测试用例失败。如何解决这个问题。如果在查找阶乘时数字为负数,我想抛出一个异常 测试文件: public void testcalculatefactoriawithout of范围异常{ 阶乘阶乘=新阶乘; AssertThrowOutOfRangeException.class, ->因子计算因子-12; } 代码文件: 公共类阶乘{ 公共字符串计算系数数{ //如果数字小于1 试一试{ 如果数字1000 抛出新的OutOfRangeExceptio

预期会引发异常,但不会引发任何异常,从而导致测试用例失败。如何解决这个问题。如果在查找阶乘时数字为负数,我想抛出一个异常

测试文件:

public void testcalculatefactoriawithout of范围异常{ 阶乘阶乘=新阶乘; AssertThrowOutOfRangeException.class, ->因子计算因子-12; } 代码文件:

公共类阶乘{ 公共字符串计算系数数{ //如果数字小于1 试一试{ 如果数字<1 抛出新的OutOfRangeExceptionNumber不能小于1; 如果数字>1000 抛出新的OutOfRangeExceptionNumber不能大于1000; }捕获范围异常{ } } } 公共类OutOfRangeException扩展了异常{ 公共超出范围例外字符串str{ 超级明星; } }
我期望输出会成功,但它会导致失败

您的测试很好,问题在于您的代码没有抛出异常,或者更正确地说,抛出并捕获异常


从方法中删除catch-OutOfRangeException e子句并添加throws-OutOfRangeException,然后您的测试将通过

您的测试很好,问题在于您的代码没有抛出异常,或者更正确地说,抛出并捕获异常


从方法中删除catch-OutOfRangeException e子句,并添加throws-OutOfRangeException,然后您的测试将通过

当您的方法抛出异常时,您可以拥有如下所示的测试用例

@Test(expected =OutOfRangeException.class)
public void testCalculateFactorialWithOutOfRangeException() throws OutOfRangeException{

    Factorial factorial = new Factorial();
   factorial.calculateFactorial(-12);
}
然而,在您的情况下,您并没有在类中抛出异常,而是在catch块中处理它,如果您在方法中抛出异常,那么它将工作

class Factorial {

    public String calculateFactorial(int number) throws OutOfRangeException{

        //If the number is less than 1

        if(number < 1)
            throw new OutOfRangeException("Number cannot be less than 1");
        if(number > 1000)
            throw new OutOfRangeException("Number cannot be greater than 1000");


        return "test";
   }
}

当您的方法抛出异常时,您可以有一个如下所示的测试用例

@Test(expected =OutOfRangeException.class)
public void testCalculateFactorialWithOutOfRangeException() throws OutOfRangeException{

    Factorial factorial = new Factorial();
   factorial.calculateFactorial(-12);
}
然而,在您的情况下,您并没有在类中抛出异常,而是在catch块中处理它,如果您在方法中抛出异常,那么它将工作

class Factorial {

    public String calculateFactorial(int number) throws OutOfRangeException{

        //If the number is less than 1

        if(number < 1)
            throw new OutOfRangeException("Number cannot be less than 1");
        if(number > 1000)
            throw new OutOfRangeException("Number cannot be greater than 1000");


        return "test";
   }
}

你的括号对吗?看起来catch块在calculateFactorial方法之外为什么会有catch块?格式/缩进很难理解,但看起来您在两个位置抛出OutOfRangeException,然后捕获OutOfRangeException并将其吞下–也就是说,调用方永远不会看到OutOfRangeException。您的测试期望抛出异常,但您的代码永远不会从方法中抛出异常。此代码甚至不会编译。首先修复编译错误。旁注:。你真的打算进行这么大的计算吗?@jhell耶!!代码正确地括在括号内。我尽力只贴必要的部分。你的括号正确吗?看起来catch块在calculateFactorial方法之外为什么会有catch块?格式/缩进很难理解,但看起来您在两个位置抛出OutOfRangeException,然后捕获OutOfRangeException并将其吞下–也就是说,调用方永远不会看到OutOfRangeException。您的测试期望抛出异常,但您的代码永远不会从方法中抛出异常。此代码甚至不会编译。首先修复编译错误。旁注:。你真的打算进行这么大的计算吗?@jhell耶!!代码正确地括在括号内。我尽了最大努力只发布必要的部分。谢谢你的帮助。这真的很有帮助。谢谢你的帮助。这真的很有帮助。谢谢你宝贵的时间来回答这个问题。谢谢阿卡什很高兴知道这有帮助谢谢你宝贵的时间来回答这个问题。谢谢阿卡什很高兴知道这有帮助