Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为测试设置单独的数据库?_Java_Database_Glassfish_Integration Testing - Fatal编程技术网

Java 如何为测试设置单独的数据库?

Java 如何为测试设置单独的数据库?,java,database,glassfish,integration-testing,Java,Database,Glassfish,Integration Testing,实际上,当运行Selenium测试用例时。我使用Glassfish中配置的live(主数据库)数据库。如果我们为测试目的添加记录,那么它将在主数据库中复制。这不好,我知道。那么有没有办法为硒测试用例建立单独的数据库。对于Glassfish: 定义JDBC连接池资源,以引用生产服务器和开发服务器的不同数据库 如果您没有运行两台不同的服务器,那么您的第一步就是修复这一问题,并运行不同的服务器。和不同的数据库服务器。永远不要将开发机器/服务器指向生产数据,甚至是生产数据库服务器 如果您正在尝试执行应

实际上,当运行Selenium测试用例时。我使用Glassfish中配置的live(主数据库)数据库。如果我们为测试目的添加记录,那么它将在主数据库中复制。这不好,我知道。那么有没有办法为硒测试用例建立单独的数据库。

对于Glassfish:

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

  • 如果您没有运行两台不同的服务器,那么您的第一步就是修复这一问题,并运行不同的服务器。和不同的数据库服务器。永远不要将开发机器/服务器指向生产数据,甚至是生产数据库服务器


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

为此,您可能需要使用内存中的数据库,可能是与JavaSDK捆绑在一起的HSQL,这样您就不需要安装任何驱动程序,也不需要在测试运行后清理任何内容

如何创建第二个连接取决于您使用的是什么,希望您有一个中心类或方法来获取数据库连接,如下所示:

Connection c = MyConnectionClass.getConnection();
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
    }
}
因此,修改getConnection方法很容易,因此您可以指出HSQL直接连接用于测试,如下所示:

Connection c = MyConnectionClass.getConnection();
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
    }
}
或者您也可以更正确地为这个类创建一个mock。但我不确定selenium是否支持这种开箱即用的方法

当然,在开始测试之前,您需要将数据库模式创建到内存中的数据库中。例如,如果您使用hibernate或JPA,那么这应该很简单(确保您添加了第二个持久化单元,并在本例中使用它),如果没有,那么您应该为您的数据库提供脚本,并使用JDBC运行它们,就像在任何数据库中运行它们一样

另外,如果您不希望每次运行测试时都运行脚本,请使用hsql,但使用文件模式(更改jdbc:hsqldb:memforjdbc:hsqldb:file,它将使用一个文件存储数据库)

如果您想了解更多信息,以下是有关hsql数据库的一些信息:


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

您的问题不是关于Selenium,而是关于如何设置单独的数据库。您使用的是什么数据库服务器?好的,我可以创建一个新的JDBC连接池。但是,我如何使用Selenium WebDriver连接该连接池。您说过“我使用Glassfish中配置的live(主数据库)数据库”。重点是,在您的测试环境中,您将数据库配置为您的测试数据库,而不是主数据库。好的,谢谢。对于SeleniumWebDriver测试用例,我可以在哪里配置测试环境?请告诉我步骤。恐怕我只能谈JavaEE问题;不接触硒。我可以假设它是一个测试框架,除了我已经说过的,我不能添加任何东西。