SpringJUnit4ClassRunner
과 함께 사용자 정의 TestExecutionListener
을 사용하여 테스트 데이터베이스에서 Liquibase 스키마 설정을 실행하고 싶습니다. 내 TestExecutionListener
잘 작동하지만 내 클래스에 주석을 사용하면 테스트중인 DAO 주입이 더 이상 작동하지 않습니다. 적어도 인스턴스는 null입니다. TestExecutionListener를 사용할 때 스프링 테스트 주입이 작동하지 않습니다.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/applicationContext-test.xml" })
@TestExecutionListeners({ LiquibaseTestExecutionListener.class })
@LiquibaseChangeSet(changeSetLocations={"liquibase/v001/createTables.xml"})
public class DeviceDAOTest {
...
@Inject
DeviceDAO deviceDAO;
@Test
public void findByCategory_categoryHasSubCategories_returnsAllDescendantsDevices() {
List<Device> devices = deviceDAO.findByCategory(1); // deviceDAO null -> NPE
...
}
}
리스너
은 매우 간단하다 : 오류가 단지NullPointerException
내 테스트에서, 로그에 없습니다
public class LiquibaseTestExecutionListener extends AbstractTestExecutionListener {
@Override
public void beforeTestClass(TestContext testContext) throws Exception {
final LiquibaseChangeSet annotation = AnnotationUtils.findAnnotation(testContext.getTestClass(),
LiquibaseChangeSet.class);
if (annotation != null) {
executeChangesets(testContext, annotation.changeSetLocations());
}
}
private void executeChangesets(TestContext testContext, String[] changeSetLocation) throws SQLException,
LiquibaseException {
for (String location : changeSetLocation) {
DataSource datasource = testContext.getApplicationContext().getBean(DataSource.class);
DatabaseConnection database = new JdbcConnection(datasource.getConnection());
Liquibase liquibase = new Liquibase(location, new FileSystemResourceAccessor(), database);
liquibase.update(null);
}
}
}
. 내 TestExecutionListener
의 사용이 자동 와이어 링 또는 주입에 어떻게 영향을 주는지는 알 수 없습니다.
맞습니다. @ TestExecutionListeners를 통해 사용자 정의 'TestExecutionListener'를 지정하면 모든 기본 TestExecutionListener가 암시 적으로 대체됩니다. 물론,이 기능은 잘 설명되어 있지 않을 수 있습니다. 따라서 JIRA 문제를 자유롭게 열어 문서 개선을 요청하십시오. ;) –
@SamBrannen : 실제로 그것은 암시 적으로 설명되어 있습니다. 내 업데이트 답변을 참조하십시오. – nansen
필자가 작성한 이후 인용 한 텍스트를 잘 알고 있습니다. ;)하지만 ... 당신이 발생한 시나리오를 명시 적으로 설명하지는 않습니다. 그렇기 때문에 문서를 개선하기 위해 JIRA 티켓을 개설 할 것을 제안했습니다. –