2015-12-11 81 views
0

我正在嘗試在我的Spring Boot應用程序中編寫集成測試。我在安裝配置時遇到問題。以下異常被拋出:春季測試+ DBUnit無法加載數據集

java.lang.IllegalArgumentException: Unable to load dataset from "sampleData.xml" using class com.github.springtestdbunit.dataset.FlatXmlDataSetLoader 

事情我已經嘗試:

  1. 更改sampleData.xml文件的名稱。
  2. 使用value =「」符號。
  3. 使用classpath:在文件名之前。
  4. 在文件名之前使用附加的「/」。

sampleData.xml與我的測試類位於同一個目錄中。我想我錯過了一些愚蠢的東西。

sampleData.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<dataset> 
<Benutzer userId="1" firstName="peter" lastName="pan" email="[email protected]"/> 
<Benutzer userId="2" firstName="hans" lastName="wurst" email="[email protected]"/> 
</dataset> 

BenutzerVerwaltungsIntegrationsTest:

RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(loader = WebDelegatingSmartContextLoader.class, classes = {ExampleApplicationContext.class}) 
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, 
    DirtiesContextTestExecutionListener.class, 
    TransactionalTestExecutionListener.class, 
    DbUnitTestExecutionListener.class}) 
@DatabaseSetup("sampleData.xml") 
@WebAppConfiguration 
public class BenutzerverwaltungIntegrationTest { 

@Resource 
private WebApplicationContext webApplicationContext; 

private MockMvc mockMvc; 

@Before 
public void setUp() { 
    mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); 
} 

@Test 
@ExpectedDatabase("sampleData.xml") 
public void findAll() throws Exception { 
    mockMvc.perform(get("/verwaltung")) 
      .andExpect(status().isOk()) 
      .andExpect(forwardedUrl("/WEB-INF/jsp/verwaltung.jsp")) 
      .andExpect(model().attribute("Benutzer", hasSize(2))) 
      .andExpect(model().attribute("Benutzer", hasItem(
        allOf(
          hasProperty("userId", is(1l)), 
          hasProperty("firstName", is("peter")), 
          hasProperty("lastName", is("pan")), 
          hasProperty("email", is("[email protected]")) 
        ) 
      ))) 
      .andExpect(model().attribute("Benutzer", hasItem(
        allOf(
          hasProperty("userid", is(2l)), 
          hasProperty("firstName", is("Hans")), 
          hasProperty("lastName", is("Wurst")), 
          hasProperty("email", is("[email protected]")) 
        ) 
      ))); 
    } 
} 

ExampleApplicationContext:

@Configuration 
@PropertySource("classpath:application.properties") 
public class ExampleApplicationContext { 
@Resource 
private Environment environment; 

@Bean 
public DataSource dataSource(){ 

    JdbcDataSource dataSource = new JdbcDataSource(); 
    dataSource.setURL(environment.getProperty("spring.datasource.url")); 
    dataSource.setUser(environment.getProperty("spring.datasource.username")); 
    dataSource.setPassword(environment.getProperty("spring.datasource.password")); 
    return dataSource; 
    } 
} 
+1

xml文件應該放在'src/test/resources'而不是'src/test/java'中,將它移動到正確的位置。 –

+0

試過了。沒有改變。這可能是我的pom.xml的問題嗎? – user1651804

+1

不,但你的xml應該在資源路徑而不是java路徑。如果你在後者有它,它不會被複制到目標文件夾。在將它移動到資源時,您是否保留了目錄結構或將其直接移到了資源中? –

回答

1

使用Maven時,您有src/test一個用於java文件的一個目錄,另一個用於其他任何目錄resources。如果您將其他.java文件中的其他文件放在src/test/java中,那麼這些文件將不會被處理並複製到target/test-classes目錄,因此在測試運行時這些文件將不可用。

您需要將.xml文件放在src/test/resources目錄中,以便對它們進行處理和複製。