Arquillian测试依赖注入失败时Maven未标记失败的解决问询
解决Arquillian依赖注入失败时测试误判为通过的问题
当Arquillian测试中依赖注入失败时,测试方法往往会被静默跳过,但Maven和Jenkins会误判为测试通过,这确实是个容易引发严重问题的隐患。以下几种方法可以让这类场景直接标记为测试失败:
1. 用@Before方法提前校验注入对象
在测试类中添加@Before注解的初始化方法,主动检查注入的依赖是否为空,一旦为空就抛出异常,强制让测试失败:
@ExtendWith(ArquillianExtension.class) class FailingArquillianTestIssueIT { @Inject DummyInterface dummyInterface; @Deployment(testable = true) public static JavaArchive create() throws Exception { JavaArchive archive = ShrinkWrap.create(JavaArchive.class) .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); return archive; } @Before void checkInjections() { if (dummyInterface == null) { throw new IllegalStateException("DummyInterface 依赖注入失败,测试终止"); } } @Test void test1() { assertTrue(false); } }
2. 利用@PostConstruct做注入后校验
借助CDI的@PostConstruct注解,在依赖注入完成后立刻执行校验逻辑,同样为空则抛出异常:
@ExtendWith(ArquillianExtension.class) class FailingArquillianTestIssueIT { @Inject DummyInterface dummyInterface; @PostConstruct void validateInjections() { if (dummyInterface == null) { throw new IllegalStateException("DummyInterface 未被正确注入,测试失败"); } } @Deployment(testable = true) public static JavaArchive create() throws Exception { JavaArchive archive = ShrinkWrap.create(JavaArchive.class) .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); return archive; } @Test void test1() { assertTrue(false); } }
3. 开启容器的严格注入检查
部分Arquillian容器(比如WildFly)支持开启严格模式,当依赖注入失败时直接导致部署失败,进而让整个测试标记为失败。只需在arquillian.xml中添加对应配置:
<arquillian xmlns="http://jboss.org/schema/arquillian" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd"> <container qualifier="wildfly" default="true"> <configuration> <property name="strict">true</property> </configuration> </container> </arquillian>
以上方法的核心逻辑都是在测试执行前主动触发校验,避免依赖注入失败导致测试静默跳过的情况,确保Jenkins和Maven能准确识别失败的测试。
内容的提问来源于stack exchange,提问作者erik
相关产品推荐
相关产品推荐

