java - 我应该在 junit 库中断言还是抛出异常?

标签 java junit

我正在编写一个 java 库来轻松编写一些 junit 测试。我不知道我是否必须在我的库中断言或抛出异常。这是一个例子。假设我在我的库中定义了这个函数来检查类的方法数

public void assertNumberOfMethods(Class clazz, int expectedNumberOfMethods) {
     int numberOfMethods = clazz.getDeclaredMethods().length;
     //TODO compare number and expected number
}

我应该

  1. 直接在我的库中断言

    Assert.assertTrue(expectedNumberofMethod > 0); 
    Assert.assertEquals(numberOfMethods,expectedNumberOfMethods);
    //...
    
  2. 抛出一个异常并让用户处理这个异常。由于此库旨在用于单元测试,因此用户将能够使用 @Test(expected=SomeCustomException.class)

    捕获部分异常
    public void assertNumberOfMethods(Class clazz, int expectedNumberOfMethods)  throws IllegalArgumentException, SomeCustomException {
        if(expectedNumberOfMethods <= 0)
            throw new IllegalArgumentException(/*...*/);
    
        int numberOfMethods = clazz.getDeclaredMethods().length;
    
        if(numberOfMethods != expectedNumberOfMethods)
            throw new SomeCustomException(/*...*/);
    }
    

编辑这是一个虚拟示例

最佳答案

您正计划创建专门的断言方法,就像您要为 Assert 类编写扩展一样。

为此,您应该直接抛出断言错误(变体 1),就像 Assert 中的断言方法一样,提供有用的错误消息。

@Test 注释中指定预期异常的可能性服务于不同的目的。有了这个注释,Junit 允许您测试一段代码是否抛出预期的异常,而无需在测试代码中捕获异常。

关于java - 我应该在 junit 库中断言还是抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33955585/

相关文章:

java - 向灰度 BufferedImage 添加颜色

java - SonarQube 不显示单元测试结果

java - 当 mvn install 神秘失败时 -

java - 在 eclipse java 中组织导入

java - Maven 没有看到我在单元测试中使用的一些文本文件

Java 8 Streams - 使用流将相同类型的多个对象映射到列表

java - Java 中的基础数学

java - 在 postman 中发送 PathVariable @PostMapping

java - PowerMock:如何默认返回null?

java - 单击在 selenium 驱动程序 java 中不起作用