加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 检查JUnit Extension是否抛出特定的Exception

发布时间:2020-12-15 01:08:28 所属栏目:Java 来源:网络整理
导读:假设我开发了一个扩展,它不允许测试方法名称以大写字符开头. public class DisallowUppercaseLetterAtBeginning implements BeforeEachCallback { @Override public void beforeEach(ExtensionContext context) { char c = context.getRequiredTestMethod().

假设我开发了一个扩展,它不允许测试方法名称以大写字符开头.

public class DisallowUppercaseLetterAtBeginning implements BeforeEachCallback {

    @Override
    public void beforeEach(ExtensionContext context) {
        char c = context.getRequiredTestMethod().getName().charAt(0);
        if (Character.isUpperCase(c)) {
            throw new RuntimeException("test method names should start with lowercase.");
        }
    }
}

现在我想测试我的扩展按预期工作.

@ExtendWith(DisallowUppercaseLetterAtBeginning.class)
class MyTest {

    @Test
    void validTest() {
    }

    @Test
    void TestShouldNotBeCalled() {
        fail("test should have failed before");
    }
}

如何编写测试以验证执行第二个方法的尝试是否会抛出带有特定消息的RuntimeException?

最佳答案
另一种方法可能是使用新的JUnit 5-Jupiter框架提供的工具.

我把我在Eclipse Oxygen上用Java 1.8测试过的代码放在下面.代码缺乏优雅和简洁,但有望成为为元测试用例构建强大解决方案的基础.

请注意,这实际上是JUnit 5的测试方法,我推荐你the unit tests of the Jupiter engine on Github.

public final class DisallowUppercaseLetterAtBeginningTest { 
    @Test
    void testIt() {
        // Warning here: I checked the test container created below will
        // execute on the same thread as used for this test. We should remain
        // careful though,as the map used here is not thread-safe.
        final Map

虽然有点冗长,但这种方法的一个优点是它不需要在同一个JUnit容器中进行模拟和执行测试,这将在以后用于实际单元测试.

通过一些清理,可以实现更易读的代码.同样,JUnit-Jupiter资源可以成为灵感的重要来源.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读