栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Mockito在异常Junit 4.10之后进行验证

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mockito在异常Junit 4.10之后进行验证

ExpectedException
通过将整个测试方法通过JUnit
@Rule
包装在try-
catch块中来工作。当您的代码引发异常时,它将堆栈上移至最接近的try
/ catch,恰好在ExpectedException实例中(该实例检查您所期望的异常)。

在Java中,如果方法中发生未捕获的异常,则控制将永远不会在该方法的后面返回到语句。同样的规则也适用于此: 异常发生后,控件从不返回测试中的语句。

从技术上讲,您可以将验证放在最后一块,但这往往是个坏习惯。 编辑:
您的被测系统可能会引发意外的异常,或者根本没有异常,这将为您提供有用的故障消息和跟踪;但是,如果该失败导致您的验证或断言在该

finally
块中失败,那么Java将显示该消息,而不是有关意外异常或意外成功的消息。这可能会使调试变得困难,尤其是因为您的错误将来自跟随错误根源的代码行,错误地暗示其上的代码成功。

如果您确实需要在异常之后验证状态,则可以按照方法在每个方法的基础上随时返回:

@Testpublic void testExpectedException(){  MockedObject mockObj = mock(MockedObj.class);  MySubject subject = new MySubject(mockedObj);  try {    subject.someMethodThrowingException();    fail("Expected MyException.");  } catch (MyException expected) {    assertEquals("My exception message.", expected.getMessage());  }  verify(mockObj).someCleanup(eq(...));}

更新: 使用Java
8的lambda表达式,您可以将功能接口调用足够简洁地包装在try块中,以变得有用。我想对这种语法的支持将在许多标准测试库中找到。

assertThrows(MyException.class,    () -> systemUnderTest.throwingMethod());


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/430926.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号