我有一个测试用例,它有一个@Autowired字段。我希望有一个方法来设置测试用例,因为它有许多@Test注解的方法,这些方法将依赖于相同的生成数据(为此我需要autowired类)。有什么好方法可以实现这一点?如果我有@BeforeClass,那么我需要使方法静态化,这会破坏自动装配。
@Autowired
@Test
@BeforeClass
piv4azn71#
第1份溶液
使用TestNG代替。@Before*注解在TestNG中表现为this way。用@Before*注解的方法不一定是静态的。
@Before*
@org.testng.annotations.BeforeClass public void setUpOnce() { //I'm not static! }
第二个解决方案
如果你不想这样做,你可以使用Spring的执行监听器(AbstractTestExecutionListener)。你必须像这样注解你的测试类:
AbstractTestExecutionListener
@TestExecutionListeners({CustomTestExecutionListener.class}) public class Test { //Some methods with @Test annotation. }
然后用这个方法实现CustomTestExecutionListener:
CustomTestExecutionListener
public void beforeTestClass(TestContext testContext) throws Exception { //Your before goes here. }
包含在一个文件中,看起来像:
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"commonContext.xml" }) @TestExecutionListeners({SimpleTest.class}) public class SimpleTest extends AbstractTestExecutionListener { @Override public void beforeTestClass(TestContext testContext) { System.out.println("In beforeTestClass."); } @Test public void test() { System.out.println("In test."); } }
qni6mghb2#
我提出了创建一个单独的初始化方法(不是setUp)的解决方案,并使用@PostConstruct进行注解。这并不是一个优雅的解决方案,但它确保了在使用它们之前Spring正确地初始化了autowired/injected字段(这是静态@BeforeClass注解方法的初始问题)。
setUp
@PostConstruct
huwehgph3#
使用Junit 5,您可以在静态@BeforeAll上下文中使用@Autowired注解,如下所示:
Junit 5
@BeforeAll
public class TestClass { @Autowired private ApplicationContext context; @BeforeAll public static void beforeAll(@Autowired ApplicationContext context) { context.doSomething() //possible now as autowired function parameter is used } }
3条答案
按热度按时间piv4azn71#
第1份溶液
使用TestNG代替。
@Before*
注解在TestNG中表现为this way。用
@Before*
注解的方法不一定是静态的。第二个解决方案
如果你不想这样做,你可以使用Spring的执行监听器(
AbstractTestExecutionListener
)。你必须像这样注解你的测试类:
然后用这个方法实现
CustomTestExecutionListener
:包含在一个文件中,看起来像:
qni6mghb2#
我提出了创建一个单独的初始化方法(不是
setUp
)的解决方案,并使用@PostConstruct
进行注解。这并不是一个优雅的解决方案,但它确保了在使用它们之前Spring正确地初始化了autowired/injected字段(这是静态@BeforeClass
注解方法的初始问题)。huwehgph3#
使用
Junit 5
,您可以在静态@BeforeAll
上下文中使用@Autowired
注解,如下所示: