ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – JUnit测试预期异常的正确方法

2019-10-01 02:04:34  阅读:1152  来源: 互联网

标签:java unit-testing junit junit4


大家好我想知道这种测试我的异常的方法是否正常,我有这个例外我需要抛出第二个测试注释,我接收结果是一个红色的邪恶吧,一个成功和一个失败,你可以猜到失败是我关心的,我有失败();但原因是因为我读到了测试异常的方法,现在我很困惑.

此外,我不得不说im willin得到绿色条,因为我期待异常,但我不知道失败是否是正确的方式来看到预期的异常的答案.

如果您有任何建议,我将不胜感激

@Before
    public void setUp() throws Exception {
        LogPack.logPacConfig(Constants.LOGGING_FILE);
        gtfri = "+RESP:GTFRI,380502,869606020101881,INCOFER-gv65,,10,1,1,0.0,0,888.1,-84.194560,9.955602,20170220074514,,,,,,0.0,,,,100,210100,,,,20170220074517,40A2$";
        weirdProtocol = "+RESP:GRI,380502,869606020101881,INCOFER-gv65,,10,1,1,0.0,0,888.1,-84.194560,9.955602,20170220074514,,,,,,0.0,,,,100,210100,,,,20170220074517,40A2$";
        factory = new LocomotiveFactory();
    }
    @Test
    public void GTFRICreationTester_shouldPass() throws TramaConProtolocoloDesconocido {
        assertTrue(factory.createLocomotive(gtfri, false, new Date()) instanceof LocomotiveGTFRI);
    }

    @Test(expected = TramaConProtolocoloDesconocido.class)
    public void GTFRICreationTester_shouldFail()  {
        try {
            factory.createLocomotive(weirdProtocol, false, new Date());
            fail("Expected an TramaConProtolocoloDesconocido");
        } catch (TramaConProtolocoloDesconocido e) {
            //assertSame("exception thrown as expected", "no se conoce el protocolo dado para la creacion de este factory", e.getMessage());;
        }
    }

解决方法:

测试预期异常有3种最常用的方法:

第一种方法是最常用的方法,但您只能使用它来测试预期异常的类型.如果不抛出ExceptionType,则此测试将失败:

@Test(expected = ExceptionType.class)
public void testSomething(){
    sut.doSomething();
}

此外,您无法使用此方法指定失败消息

更好的选择是使用ExpectedException JUnit @Rule.这里你可以为预期的异常断言更多

@Rule
public ExpectedException thrown = ExpectedException.none();

@Test
public void testSomething(){
    thrown.expect(ExceptionType.class);
    thrown.expectMessage("Error message");
    thrown.expectCause(is(new CauseOfExeption()));
    thrown.reportMissingExceptionWithMessage("Exception expected"); 
    //any other expectations
    sut.doSomething();
}

第三个选项将允许您执行与使用ExpectedException @Rule相同的操作,但所有断言都应手动编写.但是,此方法的优点是您可以使用任何自定义断言和所需的任何断言库:

@Test
public void testSomething(){
    try{
        sut.doSomething();
        fail("Expected exception");
    } catch(ExceptionType e) {
    //assert ExceptionType e
    } 
}

标签:java,unit-testing,junit,junit4
来源: https://codeday.me/bug/20191001/1837380.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有