如何在静态@BeforeClass中自动布线字段?

2022-08-31 20:12:48
@RunWith(SpringJUnit4ClassRunner.class)
public void ITest {
    @Autowired
    private EntityRepository dao;

    @BeforeClass
    public static void init() {
        dao.save(initialEntity); //not possible as field is not static
    }
}

如何将我的服务注入到静态初始化类中?


答案 1

使用 Junit 5,您可以执行此操作(@BeforeAll而不是@BeforeClass)

public void ITest {
    @Autowired
    private EntityRepository dao;

    @BeforeAll
    public static void init(@Autowired EntityRepository dao) {
        dao.save(initialEntity); //possible now as autowired function parameter is used
    }
}

通过离开该字段,这意味着它可以在其他测试中使用


答案 2

我一直在使用的一个解决方法是使用一个标志来跳过为每个测试用例执行它@Before

@RunWith(SpringJUnit4ClassRunner.class)
public class BaseTest {

@Autowired
private Service1 service1;

@Autowired
private Service2 service2;

private static boolean dataLoaded = false;

@Before
public void setUp() throws Exception {

    if (!dataLoaded) {
        service1.something();
        service2.somethingElse();
        dataLoaded = true;
    }
  }
}

推荐