[SPRING] 단위 테스트를 실행할 때마다 내 H2 데이터베이스를 지우는 것은 무엇입니까?
SPRING단위 테스트를 실행할 때마다 내 H2 데이터베이스를 지우는 것은 무엇입니까?
나는 Spring + Hibernate + H2 프로젝트를 인터넷에서 발견 한 예제를 기반으로 만들었다. 단위 테스트를 실행할 때마다 db가 지워지는 것을 제외하고는 큰 효과가 있습니다. 나는 그것을 일으키는 것이 확실하지 않습니다. 테스트는 잘 통과하지만 테스트가 실행되기 전에 테스트 전에 db에 저장 한 모든 내용이 지워집니다.
어떤 생각이 도움이 될 것입니다! 감사!
다음은 내 infrastructure.xml입니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="http://www.springframework.org/schema/jdbc
http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl" value="true" />
<property name="database" value="H2" />
</bean>
</property>
<property name="persistenceUnitName" value="booksrus" />
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.h2.Driver"/>
<property name="url" value="jdbc:h2:tcp://localhost:9092/mydb"/>
<property name="username" value=""/>
<property name="password" value=""/>
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 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">
<persistence-unit name="booksrus">
<properties>
<property name="hibernate.hbm2ddl.auto" value="create" />
</properties>
</persistence-unit>
</persistence>
Junit 테스트
package bookstore;
import static org.junit.Assert.*;
import java.util.List;
import org.apache.log4j.Logger;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
import stemen.entity.User;
import stemen.repository.UserRepository;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:simple-repository-context.xml")
@Transactional
public class TestUserRepository {
private final Logger LOGGER = Logger.getLogger(TestUserRepository.class);
@Autowired
UserRepository repository;
private User tom;
private User patrick;
private User john;
@Before
public void setUp() {
tom = new User("123 California", "Apt 143", "LA", "Tom@gmail.com", "Tom", "Hanks", "Itsasecret", "CA","54221");
patrick = new User("847 Mapple Dr.", "", "Washington", "Patrick@gmail.com", "Patrick", "Steward", "moneyMonkey", "MD","64541");
john = new User("8484 Bristol", "", "Columbus", "john@gmail.com", "John", "Roberts", "pass", "OH","57963");
repository.save(tom);
repository.save(patrick);
repository.save(john);
assertThat(repository.count(), equalTo(3L));
}
/**
* Tests inserting a user and asserts it can be loaded again.
*/
@Test
public void testThatTomCanBeInserted() {
User retrievedUser = repository.save(tom);
assertThat(retrievedUser, equalTo(tom));
assertEquals(tom, repository.findOne(retrievedUser.getId()));
}
@Test
public void testThatJohnCanBeFoundByEmailAndPassword(){
User retreivedUser = repository.findUserByEmailIgnoreCaseAndPassword(john.getEmail(), john.getPassword());
assertThat(retreivedUser, equalTo(john));
}
}
해결법
-
==============================
1.속성 이름 = "hibernate.hbm2ddl.auto"value = "create"/> 이는 매번 스키마를 다시 작성하는 것을 떨어 뜨리고 있습니다. 업데이트하도록 변경하십시오. 그렇게하지 않으면 처음 생성됩니다.
속성 이름 = "hibernate.hbm2ddl.auto"value = "create"/> 이는 매번 스키마를 다시 작성하는 것을 떨어 뜨리고 있습니다. 업데이트하도록 변경하십시오. 그렇게하지 않으면 처음 생성됩니다.
자세한 설명은이 링크를 참조하십시오. 링크
from https://stackoverflow.com/questions/15870168/what-is-wiping-my-h2-database-every-time-i-run-a-unit-test by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스트럿을 사용하여 봄에 선택한 메뉴 강조 표시 (0) | 2019.05.29 |
---|---|
[SPRING] 행렬 매개 변수로 GET 요청 만들기 (0) | 2019.05.29 |
[SPRING] 415 REST 템플릿을 통해 json 파일을 보내는 동안 지원되지 않는 미디어 유형 (0) | 2019.05.29 |
[SPRING] 중첩 예외가 java.lang.IllegalArgumentException : 관리되지 않는 유형 인 경우 : class (0) | 2019.05.28 |
[SPRING] 자바, 스프링 프레임 워크 MVC - 방향 전환 (0) | 2019.05.28 |