TestNG 是不是有像 SpringJUnit4ClassRunner 这样的跑步者

Posted

技术标签:

【中文标题】TestNG 是不是有像 SpringJUnit4ClassRunner 这样的跑步者【英文标题】:Does TestNG has runner like SpringJUnit4ClassRunnerTestNG 是否有像 SpringJUnit4ClassRunner 这样的跑步者 【发布时间】:2011-02-07 03:48:20 【问题描述】:

当我在 JUnit 中(在 Spring 上下文中)编写测试时,我通常会这样做:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:testContext.xml")
public class SimpleTest 

    @Test
    public void testMethod() 
        // execute test logic...
    

如何使用 TestNG 做同样的事情?


我会添加更多细节。使用 AbstractTestNGSpringContextTests 它可以工作,但不是我想要的方式。 我有一些测试...

@ContextConfiguration(locations =  "classpath:applicationContextForTests.xml" )
public class ExampleTest extends AbstractTestNGSpringContextTests 

    private Boolean someField;

    @Autowired
    private Boolean someBoolean;

    @Test
    public void testMethod() 
        System.out.println(someField);
        Assert.assertTrue(someField);
    

    @Test
    public void testMethodWithInjected() 
        System.out.println(someBoolean);
        Assert.assertTrue(someBoolean);
    

    // setters&getters

和描述符...

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="exampleTest" class="pl.michalmech.ExampleTest">
        <property name="someField">
            <ref bean="someBoolean"/>
        </property>
    </bean>

    <bean id="someBoolean" class="java.lang.Boolean">
        <constructor-arg type="java.lang.String" value="true"/>
    </bean>
</beans>

结果是……

null
true
Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.599 sec <<< FAILURE!

Results :

Failed tests: 
  testMethod(pl.michalmech.ExampleTest)

这就是我问runner的原因。

【问题讨论】:

***.com/questions/2608528/… 的可能重复项 看起来,但完全不同。 【参考方案1】:

TestNG 不使用 Spring 来实例化您的测试。这就是为什么 someField=null

【讨论】:

【参考方案2】:

正确,TestNG 总是实例化 Test 类(在构造函数中放置断点进行验证)。稍后(@BeforeClass)来自上下文的 bean 被注入到 Test 类中。

不过,我很好奇为什么您首先将每个测试都定义为 bean。在我使用 Spring 的 10 年中,我从未需要这样做,也从未见过有人这样做......

【讨论】:

以上是关于TestNG 是不是有像 SpringJUnit4ClassRunner 这样的跑步者的主要内容,如果未能解决你的问题,请参考以下文章

junit常用及junit联合spring

测试后 SpringJUnit4ClassRunner 是不是仍然不能可靠地调用 DisposableBean.destroy

Kotlin 是不是有像 Python 一样的“枚举”函数?

TabBarController 是不是有像 prepareForSegue 这样的拦截点?

javascript,是不是有像 isArray 这样的 isObject 函数? [复制]

木材是不是有像 404 一样的默认 500 模板?