【发布时间】:2017-09-08 08:14:36
【问题描述】:
我想将我的 JUnit 测试配置为在与运行应用程序的数据库不同的数据库上运行。我已经这样做了几个小时,但到目前为止还没有成功。尝试使用 application.properties 文件和 spring 配置文件对其进行配置,但没有任何效果。那么如何实现呢?任何帮助将不胜感激。
这是我的测试文件:
@RunWith(SpringRunner.class)
@SpringBootTest(properties = "spring.profiles.active=test")
public class TestContactController extends AbstractTest {
@Autowired
private MockMvc mvc;
@Test
@Rollback
public void testAddContact() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/contact/add").contentType(MediaType.APPLICATION_JSON)
.content("{\n" +
"\t\"authCode\": \"daca824a0bf04d038543373adfdb2c8f\",\n" +
"\t\"requestData\":{\n" +
"\t\t\"firstName\": \"Max\",\n" +
"\t\t\"lastName\": \"Mustermann\",\n" +
"\t\t\"category\": {\n" +
"\t\t\t\"id\": " + categoryId + "\n" +
"\t\t}, \"partOfOrgUnit\": {\n" +
"\t\t\t\"id\": " + companyId + "\n" +
"\t\t}\n" +
"\t}\n" +
"}"))
.andExpect(status().isOk())
.andExpect(content().string(equalTo("{\"success\":true,\"message\":\"SUCCESS: Contact added successfully\"}")));
}
}
我的持久化 xml,有两个数据库:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="sab_pu">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3307/projectdb?serverTimezone=UTC"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value="root"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<property name="hibernate.show_sql" value="true"/>
<property name="javax.persistence.validation.mode" value="NONE"/>
</properties>
</persistence-unit>
<persistence-unit name="sab_test_pu">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3307/testdb?serverTimezone=UTC"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value="root"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<property name="hibernate.show_sql" value="true"/>
<property name="javax.persistence.validation.mode" value="NONE"/>
</properties>
</persistence-unit>
</persistence>
这是我的 .properties 文件:
spring.datasource.url=jdbc:mysql://localhost:3307/testdb?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
例外:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.SAB.test.testsController.TestContactController':
Unsatisfied dependency expressed through field 'mvc'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type 'org.springframework.test.web.servlet.MockMvc' available: expected at least 1 bean which qualifies as autowire candidate.
Dependency annotations:{@org.springframework.beans.factory.annotation.Autowired(required=true)}
【问题讨论】:
-
如上所述,我试过了,但它只是忽略了 .properties 文件中的设置
-
嗯,我不太确定。我对此有点陌生,我想使用 MocMvc 来执行我的休息请求。通过删除 @AutoConfigure 它不再起作用。我应该自己配置而不是让 spring 为我做吗?
-
好的,那我该如何配置呢?
标签: java hibernate spring-mvc spring-boot junit