【问题标题】:how to test my custom exception with unit test如何使用单元测试测试我的自定义异常
【发布时间】:2020-11-20 20:50:56
【问题描述】:

您好,我已经为我的逻辑编写了一个测试用例,所有这些都运行良好。但是,我不知道如何测试我的自定义异常。下面是我的代码;

 @Component
    public class PlaneFactory {
    
        public Plane getPlane(String planeType) {
        
            if (StringUtils.isBlank(planeType)) {
                throw new PlaneTypeNotFoundException();
            }
        
            if (planeType.equalsIgnoreCase("lightJet")) {
                return new LightJet();
        
            } else if (planeType.equalsIgnoreCase("midJet")) {
                return new MidJet();
            }
           
            else {
                 throw new InvalidPlaneTypeException();
                 }

       my custom exceptions below;


     PlaneTypeNotFoundException class below;


public class PlaneTypeNotFoundException extends RuntimeException {
    
        private static final long serialVersionUID = 4314211343358454345L;
    
        public PlaneTypeNotFoundException() {
    
            super("You have not enter anything to check a plane");
        }
    
    }
    InvalidPlaneTypeException below;



public class InvalidPlaneTypeException extends RuntimeException {
          
        public InvalidPlaneTypeException() {
    
            super("You need to enter one of following plane types : {LightJet, MidJet}");
        }
    
    }

哪些方法适合使用?我的意思是在这种情况下我应该使用 assertThrows 还是只使用预期的注释?

对于 PlaneTypeNotFoundException,我尝试了以下方法,但它不起作用

@Test
public void testPlaneFactory_isEmptyOrNull_ThenReturnException() {

    String planeType = "";

    LightJet lightJet= (LightJet) planeFactory.getPlane(planeType);

    assertThrows(PlaneNotFoundException.class, () -> lightJet.getType().equalsIgnoreCase(planeType), "You have not enter anything to check a plane");
}

【问题讨论】:

    标签: java spring junit java-8 mocking


    【解决方案1】:

    如果我正确地遵循了您的代码,那么assertThrows() 中的可执行 lambda 应该是您期望生成异常的代码:

    public void testPlaneFactory_isEmptyOrNull_ThenReturnException() {
        assertThrows(PlaneNotFoundException.class, () -> planeFactory.getPlane(""));
    }
    

    如果它确实抛出异常,那么测试应该通过。

    第二种情况的测试是:

    void testInvalidPlaneType() {
        assertThrows(InvalidPlaneTypeException.class, () -> planeFactory.getPlane("doh"));
    }
    

    【讨论】:

    • 不用担心,JUnit 在异常测试方面总是有点古怪。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 2022-12-21
    • 2023-01-25
    • 2022-11-04
    • 1970-01-01
    相关资源
    最近更新 更多