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

带有自定义异常的JUnit测试失败条件错误

郎祯
2023-03-14

我正在为Rest控制器编写一个错误条件的测试用例,当我将expected exception设置为exception.class时,测试运行时没有错误。当我将预期的异常更改为CustomException.class时,测试失败并出现断言错误

下面是我的控制器类:

@RestController
public class CustomController<CustomFieldRequest customFieldRequest, CustomField customField> {
    @PutMapping(path = "/{customFieldId}",
            consumes = MediaType.APPLICATION_JSON_VALUE, produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_ATOM_XML_VALUE})
    public CustomField updateCustomField(@PathVariable String customFieldId, @RequestBody CustomFieldRequest customFieldRequest) throws CustomException {
        customFieldRequest.setAuthorId(getUser());
        customFieldRequest.setId(customFieldId);
        return CustomService.updateCustomeField(customFieldRequest);
    }
}
@Service
public class CustomServiceImpl implements CustomService {
    @Override
    public CustomField updateCustomeField(CustomFieldRequest customFieldRequest) throws CustomException {

    }
}
public class CustomException extends Exception {
    public CustomException(final String  message) {
        super(message);
    }

    public CustomException(final String  message, final Throwable cause) {
        super(message, cause);
    }
}
public class CustomControllerTest {
    private CustomService customService = Mockito.mock(CustomService.class);

    @Test(expected=Exception.class)
    public void updateCustomFieldThrowsException() throws CustomException {
        //exception.expect(Exception.class);
        CustomFieldRequest request = getRequest();

        when(customService.updateCustomeField(request)).thenThrow(Exception.class);
        //customController.updateCustomField(request.getId(), request);
    }
}

如上所述,如果我在测试中将预期的异常更改为CustomException.class,如下所示:

    @Test(expected=CustomException.class)
    public void updateCustomFieldThrowsException() throws CustomException {
        //exception.expect(Exception.class);
        CustomFieldRequest request = getRequest();

        when(customService.updateCustomeField(request)).thenThrow(CustomException.class);
        //customController.updateCustomField(request.getId(), request);
    }

我看到java.lang.AssertionError导致测试失败。我尝试了@Rule注释(如上所示,并进行了注释)。

共有1个答案

索卓
2023-03-14

您需要CustomException的默认构造函数,或者在测试中创建执行器,如下所示:New CustomException(“”)

 类似资料:
  • 我构建了一个有3个属性的帐户类:余额、所有者、acctNo。帐户类有2个构造函数,一个接受3个属性,一个不接受数据。帐户类有设置和获取方法以及存款和取款方法。 我还构建了一个类,该类从类扩展而来。将此类修改为类后,取款方法或此方法尝试将余额设置为零以下,将抛出。 JUnit测试人员修改测试方法,将尝试提取超过当前余额的可用,所以做测试方法。我需要修改JUnit测试透支帐户,以便它捕获异常,并捕获。

  • 问题内容: 我真的是java的新手。 我正在构造函数上运行一些JUnit测试。构造函数是这样的:如果为其参数之一赋予null或空字符串,则应该抛出异常。 当我在JUnit中使用null或空字符串参数测试此构造函数时,即使我几乎100%确信将此类参数传递给它时,构造函数方法确实会引发异常,我也会看到一条红色的条。 如果该方法以预期的方式引发异常,则JUnit中是否应该没有绿色的条形?还是当异常抛出按

  • 问题内容: 编辑:目前没有JUnit 4。 嗨,您好, 我对使用JUnit进行“智能”异常测试有疑问。目前,我这样做是这样的: 如您所见,对于每个应该引发异常的函数,我都需要一个try / catch块。似乎不是执行此操作的好方法-还是没有可能减少try / catch的使用? 问题答案: 我建议您需要分解为多个单独的测试。各个try / catch块似乎彼此非常独立。您可能还希望将通用初始化逻辑

  • 这就是我的应用程序中测试的样子: 我怎样才能避免这种行为呢?

  • 我应该如何测试异常?我可以mock connector并且我可以赋予它抛出异常的行为,但是我不明白下一步该怎么做。