当前位置: 首页 > 知识库问答 >
问题:

测试代码是否抛出特定异常[重复]

万俟高峻
2023-03-14

我正在尝试测试当试图除以零时,是否会抛出带有定制消息的异常。

方法是这样的:

public static int getMultiplesOfGivenNumber(int number, int[] array){

    int multiples = 0;

    if (number == 0) {
        throw new ArithmeticException("Number cannot be zero");
    }else{
        for (int i = 0; i < array.length; i++) {
            if (array[i] % number == 0) {
                multiples += 1;
            }
        }
    }

在搜索了一些解决方案后,我发现这是一种做这件事的方法,但是我的IDE不能识别“expected”...

@Test(expected=java.lang.ArithmeticException.class)
public void testDivideByZero(){
    //arrange
    int number = 0;
    //act
    int result = B3_E2.getMultiplesOfGivenNumber(number, intervalFromOneToTen());
    //assert
    assertEquals(expected, result);

}

我只是不知道为什么我的 IDE 无法识别“预期”。不知道这是否与 Junit 版本有关,或者我使用的语法是否存在问题。

在我迄今为止使用的所有其他测试中,我从未在@Test之后添加任何内容。我刚刚在另一个线程中找到了类似问题的解决方案。

共有1个答案

凌俊名
2023-03-14

@test注释的预期参数仅在JUnit 4之后存在。您必须使用早期版本的JUnit。

也就是说,您不必使用这个注释,因此您不必为了这个特性而升级到JUnit 4。

您可以自己使用<code>try…catch</code>,并断言抛出了异常,还可以断言自定义消息是应该的。

@Test
public void testDivideByZero()
{
    try
    {
        B3_E2.getMultiplesOfGivenNumber( 0, intervalFromOneToTen() );
        assertTrue( false ); //expected exception was not thrown
    }
    catch( ArithmeticException e )
    {
        assertEquals( e.getMessage(), "Number cannot be zero" );
    }
}

这样做的好处是,您可以掌握异常对象,因此您可以检查其内容并确保其按预期初始化。在<code>ArithmeticException</code>的情况下,除了消息之外,没有什么要检查的,但在其他情况下,可能还有很多要检查的。

 类似资料:
  • 我知道一种方法是: 有什么更干净的方法吗?(可能使用JUnit的?)

  • 问题内容: 考虑以下代码: 无需添加方法签名即可编译该代码。(它与同样表现到位,太)。 我理解为什么 可以 安全地运行它,因为实际上不能将其引发在块中,因此不能引发已检查的异常。我有兴趣知道在何处指定此行为。 并非永远都不会达到目标:以下代码也会编译: 但是,如果抛出一个检查的异常,它不会像我期望的那样编译: 在JLS Sec 11.2.2中 ,它说: 一,其抛出的表达式语句(§14.18)具有静

  • 我用Spock测试Java代码。我测试这段代码: 我写了一个测试: 它失败是因为抛出了另一个CustomException。但是在块中,我捕获这个异常并抛出一个,因此我希望我的方法将抛出,而不是。如何测试它?

  • 假设我有以下功能: 根据Jest文档,我应该能够使用以下代码测试函数是否引发异常: 但是,我得到了以下错误。 有人能告诉我我做错了什么吗? 谢谢!

  • 我使用Groovy和Gradle进行测试。 我的应用程序代码中有以下几行: 如果我模拟(使用,因为是),以便返回,我希望在.一个是。 但这并没有出现在测试结果中,测试结果都是绿色的。发现这种情况的唯一方法是查看该类的测试结果:然后您会看到显示“stderr”的灰色按钮。 这似乎是因为包络正在“吞噬”它... Spock中有什么方法可以使中的异常导致测试失败吗? 另一个可能需要解释的东西是Spock

  • 由于一个我不知道的事件,调用在我的Ubuntu18.04中不再起作用。(自4月开始运行)。或I阶段尝试的任何其他生命周期都运行良好。 例如,如果我在克隆到中的Apache Commons IO的最新版本中运行,If显示 target/surefire-reports包含以下内容的许多重复 我尝试的任何其他项目都表现出类似的行为。 我尝试下载maven 3.5.4,解压缩它,通过将它添加到路径中,并