如何设置单独的数据库进行测试?

时间:2012-08-13 13:22:01

标签: java database glassfish integration-testing

实际上在运行Selenium测试用例时。我采用在Glassfish中配置的实时(主数据库)数据库。如果我们为测试目的添加记录,那么它将在主数据库中复制。这不是很清楚。那么有没有办法为Selenium测试用例提供单独的DataBase。

2 个答案:

答案 0 :(得分:2)

对于Glassfish:

  • 定义JDBC连接池资源,以引用生产服务器与开发服务器的不同数据库。

  • 如果您没有运行两台不同的服务器,那么您的第一步就是解决这个问题,正在运行不同的服务器。和不同的数据库服务器切勿将开发机器/服务器指向生产数据,甚至生产数据库服务器。

答案 1 :(得分:1)

如果您尝试进行应在部署中运行的单元测试,则必须在单元测试程序中创建第二个连接。

您可能希望在内存数据库中使用这个,也许是与Java sdk捆绑在一起的HSQL,因此您不需要安装任何驱动程序,也不需要在运行测试后清理任何内容。

如何创建第二个连接取决于您正在使用的内容,希望您将拥有一个中央类或方法来获取数据库连接,如下所示:

Connection c = MyConnectionClass.getConnection();

因此您可以轻松修改getConnection方法,以便指出测试的HSQL直接连接,如下所示:

public Connection getConnection(){
    if(testing){
        Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:mymemdb", "SA", "");
    }else{
        //get your connection from your pool or whatever you are doing right now
    }
}

或者你也可以更正确并为这个类创建一个模拟器。但是我不确定硒是否支持这种方式。

当然,在开始测试之前,您需要在内存数据库中创建数据库模式。例如,如果您使用hibernate或JPA那么应该很简单(确保添加第二个持久性单元并在这种情况下使用它),如果没有,那么您应该拥有数据库的脚本并使用JDBC运行它们在任何数据库中运行它们。

此外,如果您不想在每次运行测试时都运行脚本,请使用hsql但是在文件模式下(更改jdbc:hsqldb:mem for jdbc:hsqldb:file它将使用文件来存储数据库)

如果您想了解更多信息,请参阅hsql数据库的一些信息:link

另外如果您不喜欢hsql,可以试试sqlite(仅适用于文件模式),我认为有更多工具可以访问它