当前位置: 首页 > 面试题库 >

每次运行单元测试时,要清除H2数据库是什么?

邓阳伯
2023-03-14
问题内容

我有一个Spring + Hibernate +
H2项目,它是根据我在Internet上找到的一个示例制作的。除了每次我运行单元测试时,数据库都会被清除外,它的工作效果非常好。我不确定是什么原因造成的。测试可以顺利通过,但是我在测试运行后抹去了测试之前在数据库中输入的所有内容。

任何想法都会有所帮助!谢谢!

这是我的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));
    }

}

问题答案:

这是 属性名称=“ hibernate.hbm2ddl.auto” value =“ create” / >
,它每次都会删除n个重新创建的架构。更改它以进行更新,因此它将仅在不存在时才第一次创建。



 类似资料:
  • 问题内容: 我以为这是一个简单的任务,但是我很惊讶没有找到答案。 让我澄清一下: 我不想手动打电话。实际上,我什至没有使用命令行来查看LogCat,所以我认为这是不可能的(编辑: 实际上,是通过在单独的命令行中运行命令来实现的,但是我没有想要这样做) 。我正在使用Eclipse查看LogCat。 我不想每次都单击按钮。那就是我现在正在做的。 我确实是 通过编程方式或通过Eclipse的“运行/调试

  • 问题内容: 我已经在项目中编写了一些JUnit测试,这些测试用于在setup方法中填充数据。现在我已经将maven添加到我的项目中,并且我想执行所有来自maven的测试用例,即使用mvn test。现在的问题是,在运行每个测试类之后,不会清除我的数据库。每个类的测试用例运行后,我需要清除HSQLDB。 问题答案: 您可以通过删除架构来清除数据。默认模式称为PUBLIC。如果执行下面的SQL语句,它

  • 问题内容: 我的单元测试使用Hibernate连接到内存中的HSQLDB数据库。我希望可以采用JUnit 方法清除并重新创建数据库(包括模式和所有数据的整个数据库)的方法。 问题答案: 您可以配置hibernate配置文件,以强制数据库每次重新创建表和架构。 hibernate.hbm2ddl.auto创建SessionFactory时,自动将模式DDL验证或导出到数据库。使用create- dr

  • 问题内容: 我希望在编写用于测试某些数据库条目的单元测试中获得一些建议。 如果找不到记录,则我正在测试的功能会将数据库作为种子。 我似乎不太了解如何进行len测试。我正在使用测试数据库,因此我可以在任何时候都对其进行核对,因此,如果我只需要在函数上强制使用一个空的数据库,就没有问题了。 该函数本身可以正常工作,我只想确保已覆盖该函数。 任何建议都很好。 谢谢! 问题答案: 确实取决于您,有很多方法

  • 所以我用了这个嵌入Kafka的例子,还有这个 我对这个示例做了一点更改,并用一些数据库(如h2db)更新了kafka侦听器。 现在在我的单元测试中,当我想检查数据在数据库中是否可用时,我得到NULL。另外,我不确定如何手动检查数据库,因为h2是一个内存基础数据库。 这是更新的部分:在接收器类中 在单元测试中: 但 dt 始终为空。此外,我也无法检查数据库,因为它在测试停止后停止。有人知道如何使它可