在不创建上下文的情况下禁用 Spring 和 Junit5 测试

Posted

技术标签:

【中文标题】在不创建上下文的情况下禁用 Spring 和 Junit5 测试【英文标题】:Disable Test with Spring and Junit5 without context creation 【发布时间】:2017-10-09 06:29:12 【问题描述】:

我们最近将测试框架迁移到 JUnit5,但在使用 @SpringJUnitConfig 的测试中使用 @Disabled(和 ExecutionConditions)时遇到了一些问题: 在 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 获取文本(禁用用户交互)?

ExtJS 3.3.0 在不知道 ID 的情况下禁用按钮

如何在不完成 Bootstrap 中的一个步骤的情况下禁用进入下一步?

如何在不丢失选择颜色的情况下禁用多选的拖动选择?