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

2022-09-01 10:02:10

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

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

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

我怎样才能用TestNG做同样的事情?


我将添加更多详细信息。使用AbstractionTestNGSpringContextTests,它可以工作,但不是以我想要的方式。我有一些测试...

@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)

这就是为什么我问关于跑步者的问题


答案 1

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


答案 2

正确,TestNG 始终实例化 Test 类(将断点放在构造函数中进行验证)。稍后(@BeforeClass)将上下文中的 Bean 注入到 Test 类中。

然而,我很好奇为什么你首先会把测试定义为一个豆子。在我使用Spring的10年中,我从未需要这样做,或者看到有人这样做......


推荐