在不创建上下文的情况下禁用 Spring 和 Junit5 测试
Posted
技术标签:
【中文标题】在不创建上下文的情况下禁用 Spring 和 Junit5 测试【英文标题】:Disable Test with Spring and Junit5 without context creation 【发布时间】:2017-10-09 06:29:12 【问题描述】:我们最近将测试框架迁移到 JUnit5,但在使用 @SpringJUnitConfig
的测试中使用 @Disabled
(和 ExecutionCondition
s)时遇到了一些问题:
在 Junit4 @Ignore
中,毫无疑问地禁用了测试执行,也没有执行任何操作。使用 Junit5 和@Disabled
,系统现在在意识到不应执行测试之前创建弹簧上下文。在我们的例子中,这会导致禁用的测试失败,因为其中一些被禁用是因为在某些情况下无法创建上下文。
是否可以在 JUnit5 中以不为此测试创建弹簧上下文的方式禁用测试(类)?
小例子:
@TestInstance(Lifecycle.PER_CLASS)
@RunWith(JUnitPlatform.class) // To support tests running in eclipse
@SpringJUnitConfig(classes = BaseTestSpringTest.TestConfiguration.class)
@Disabled
public class BaseTestSpringTest
@Configuration
@ComponentScan(basePackages = "my.package" )
public class TestConfiguration
@Component
public class TestClass
@PostConstruct
public void fail()
throw new IllegalStateException();
@Autowired
protected TestClass test;
@Test
public void test() throws Exception
【问题讨论】:
如果您从 Spring 5 开始使用@EnabledIf
或 @DisabledIf
,则不应急切加载 ApplicationContext
。
关于 JUnit Jupiter 中 @Disabled
的使用,我必须准确了解 (1) 过去与 JUnit 4 一起使用的内容以及 (2) 现在与 JUnit Jupiter 一起使用的内容(JUnit 5)。
您能否提供 JUnit 4 和 JUnit Jupiter 的示例? TIA!
我们有使用@Autowired bean 的测试。这些 bean 的 @PostConstructs
失败了,所以我们在 JUnit4 的测试类上使用了 @Ignore
,这导致它们在没有任何讨论的情况下被跳过(/上下文创建)。换句话说:对于 Junit4,我从未见过 @Ignore
测试失败,而对于 Junit5 和 @Disabled
,它在很多情况下都发生过
因此,这似乎是 JUnit Jupiter 中关于测试类实例化与禁用测试类的一个错误。我会进一步调查并报告。
【参考方案1】:
这是 JUnit Jupiter 中的一个错误,仅在使用 PER_CLASS
测试实例生命周期模式时才会出现。
我在 JUnit 5 问题跟踪器中提出了以下问题来解决此问题。 https://github.com/junit-team/junit5/issues/1103
【讨论】:
该问题已在master中解决,并在最新的5.1.0-SNAPSHOT版本中修复。以上是关于在不创建上下文的情况下禁用 Spring 和 Junit5 测试的主要内容,如果未能解决你的问题,请参考以下文章
在不禁用上下文菜单的情况下管理 UITextfiled 上的长按?
如何在不触摸或点击文本字段的情况下从动态创建的 UITextField 获取文本(禁用用户交互)?