2015-09-08 21 views
6

Tôi đang cố gắng sử dụng DBUnit với nhiều cơ sở dữ liệu tải từ các tệp cấu hình khác nhau (các dự án khác nhau).Lỗi DBUnit - thiếu một trong các hạt sau: [dbUnitDatabaseConnection, dataSource]

Trong file Foo @Configuration của tôi, tôi đã đậu sau:

@Bean(name="dataSourceFoo") 
public DataSource dataSourceFoo() { 
    BasicDataSource dataSource = new BasicDataSource(); 
    ... 
    return dataSource; 
} 

Trong file Bar @Configuration của tôi, tôi đã đậu sau:

@Bean(name="dataSourceBar") 
public DataSource dataSourceBar() { 
    BasicDataSource dataSource = new BasicDataSource(); 
    ... 
    return dataSource; 
} 

Trong một dự án thứ ba, tôi tệp thử nghiệm trông giống như sau:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = ThirdProjectAppContextConfig.class) 
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, 
     DirtiesContextTestExecutionListener.class, 
     TransactionalTestExecutionListener.class, 
     DbUnitTestExecutionListener.class }) 
@DatabaseSetups({ 
     @DatabaseSetup(connection = "dataSourceFoo", value = "classpath:db/FooTest.xml"), 
     @DatabaseSetup(connection = "dataSourceBar", value = "classpath:db/BarTest.xml") }) 
@TestPropertySource("/application.properties") 
@DirtiesContext 
@Transactional 
public class FooBarTest { 

    @Autowired 
    private Service service; 

    @Test 
    public void test(){ 
     service.callFooBar(); 
     ... 
    } 
} 

Khi chạy thử nghiệm, nó sẽ ném lỗi sau:

java.lang.IllegalStateException: Unable to find a DB Unit database connection, missing one the following beans: [dbUnitDatabaseConnection, dataSource] 
    at com.github.springtestdbunit.DbUnitTestExecutionListener.getDatabaseConnectionUsingCommonBeanNames(DbUnitTestExecutionListener.java:141) 
    at com.github.springtestdbunit.DbUnitTestExecutionListener.prepareTestInstance(DbUnitTestExecutionListener.java:112) 
    at com.github.springtestdbunit.DbUnitTestExecutionListener.prepareTestInstance(DbUnitTestExecutionListener.java:87) 
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:228) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:217) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:276) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:278) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:236) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:87) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 

Bất cứ ai cũng biết tại sao DBun không tìm thấy kết nối?

Trả lời

7

com.github.springtestdbunit.DbUnitTestExecutionListener.prepareTestInstance(DbUnitTestContextAdapter) đang tìm cấu hình cơ sở dữ liệu và cấu hình cơ sở dữ liệu mà tôi đã xác định không được tìm thấy và dbunit sử dụng "dataSource" theo mặc định. Đặt cấu hình sau vào lớp thử nghiệm sẽ giải quyết vấn đề:

@DbUnitConfiguration(databaseConnection={"dataSourceFoo","dataSourceBar"}) 
hơn

thông tin tại Spring Test DBUnit

Các vấn đề liên quan