首页 > 解决方案 > JUnit @Rule 和 ExpectedException.none() 线程安全吗?

问题描述

我正在编写一个 JUnit 测试,我希望它测试是否引发了异常,因此编写了以下 Java 测试类(这不是我编写的实际 JUnit 测试,而是说明我试图理解的点)。

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

@Test
public void testMethod1() {
    thrown.expect(IllegalArgumentException.class);
    thrown.expectMessage("Parameter cannot be null");

    UtilClass.getSampleValue(null, new Object());
}

@Test
public void testMethod2() {
    thrown.expect(IllegalArgumentException.class);
    thrown.expectMessage("Parameter cannot be null");

    UtilClass.getSampleValue(new Object(), null);
}

@Test
public void testMethod3() {
    final Object actual = UtilClass.getSampleValue(new Object(), new Object());
    assertNotNull(actual);
}

当我将此发送给代码审查时,一些人在审查中写道,使用@Rule意味着测试方法不是线程安全的,并且将来如果我们想移动到并行运行测试方法,它将无法工作,因为测试没想到异常居然会看到异常。这是真的?有解决方法吗?我在网上找不到任何关于此的文档。

标签: javajunitthread-safety

解决方案


推荐阅读