readme
来自「PostgreSQL7.4.6 for Linux」· 代码 · 共 324 行
TXT
324 行
PostgreSQL/JDBC Test Suite Howto================================1 Introduction2 Installation3 Configuration4 Running the test suite5 Extending the test suite with new tests6 Guidelines for developing new tests7 Example8 Running the JDBC 2 test suite from Sun against PostgreSQL9 Credits, feedback1 Introduction--------------The PostgreSQL source tree contains an automated test suite forthe JDBC driver. This document explains how to install,configure and run this test suite. Furthermore, it offersguidelines and an example for developers to add new test cases.Sun provides two standard JDBC test suites that you may also find useful.http://java.sun.com/products/jdbc/download2.html (JDBC 1)http://java.sun.com/products/jdbc/jdbctestsuite-1_2_1.html (JDBC2, including J2EE requirements)The JDBC 2 test suite is covered in section 8 below. The JDBC 1 test suite is not currently covered in this document.2 Installation--------------Of course, you need to have a Java 2 JDK or JRE installed. Thestandard JDK from Sun is OK. You can download it fromhttp://java.sun.com/.You need to install the Ant build utility. You can download itfrom http://jakarta.apache.org/ant/.You also need to install the JUnit testing framework. You candownload it from http://www.junit.org/. Add junit.jar to yourCLASSPATH before you perform the following steps. Ant willdynamically detect that JUnit is present and then build the JDBCtest suite.You need to install and build the PostgreSQL source tree. Youcan download it from http://www.postgresql.org/devel-corner/.See README and INSTALL in the top of the tree for moreinformation.You should run ./configure with the command line option--with-java. You may also want to use --with-pgport to compile anon-standard default port number (e.g. 5433) into all components. This will cause the server to listen on thisnon-standard port and it will cause the JDBC driver to connectto this port by default. In this way your testing environment iseasily separated from other PostgreSQL applications on the samesystem.In this Howto we'll use $JDBC_SRC to refer to the directory src/interfaces/jdbc of the PostgreSQL source tree in your environment. The test suite is located in the subdirectory $JDBC_SRC/org/postgresql/test.3 Configuration---------------The test suite requires a PostgreSQL database to run the tests against and a user to login as. For a full regression test of the entire PostgreSQL system, you should run the test against a server built from the same source tree as the driver you're testing. The tests will create and drop many objects in this database, so it should not contain production tables to avoid loss of data. We recommend you assign the following names: database: test username: test password: passwordThese names correspond with the default names set for the testsuite in $JDBC_SRC/build.xml. If you have chosen other names youneed to edit this file and change the properties "database","username" and "password" accordingly.4 Running the test suite------------------------%cd $JDBC_SRC%make%make checkThis will run the command line version of JUnit. If you'd liketo see an animated coloured progress bar as the tests areexecuted, you may want to use one of the GUI versions of thetest runner. See the JUnit documentation for more information.If the test suite reports errors or failures that you cannotexplain, please post the relevant parts of the output to themailing list pgsql-jdbc@postgresql.org.5 Extending the test suite with new tests-----------------------------------------If you're not familiar with JUnit, we recommend that you first read the introductory article "JUnit Test Infected:Programmers Love Writing Tests" onhttp://junit.sourceforge.net/doc/testinfected/testing.htm.Before continuing, you should ensure you understand thefollowing concepts: test suite, test case, test, fixture,assertion, failure.The test suite consists of test cases, which consist of tests. A test case is a collection of tests that test a particularfeature. The test suite is a collection of test cases thattogether test the driver - and to an extent the PostgreSQLbackend - as a whole.If you decide to add a test to an existing test case, all youneed to do is add a method with a name that begins with "test"and which takes no arguments. JUnit will dynamically find thismethod using reflection and run it when it runs the test case.In your test method you can use the fixture that is setup for itby the test case.If you decide to add a new test case, you should do two things:1) Add a class that extends junit.framework.TestCase. It shouldcontain setUp() and tearDown() methods that create and destroythe fixture respectively.2) Edit $JDBC_SRC/org/postgresql/test/JDBC2Tests.java and add asuite.addTestSuite() call for your class. This will make thetest case part of the test suite.6 Guidelines for developing new tests-------------------------------------Every test should create and drop its own tables. We suggest toconsider database objects (e.g. tables) part of the fixture forthe tests in the test case. The test should also succeed when atable by the same name already exists in the test database, e.g.by dropping the table before running the test (ignoring errors).The recommended pattern for creating and dropping tables can befound in the example in section 7 below.Please note that JUnit provides several convenience methods tocheck for conditions. See the TestCase class in the Javadocdocumentation of JUnit, which is installed on your system. Forexample, you can compare two integers usingTestCase.assertEquals(int expected, int actual). This methodwill print both values in case of a failure.To simply report a failure use TestCase.fail().The JUnit FAQ explains how to test for a thrown exception.Avoid the use of the deprecated TestCase.assert(), since it willcollide with the new assert keyword in the Java 2 platformversion 1.4.As a rule, the test suite should succeed. Any errors or failures- which may be caused by bugs in the JDBC driver, the backend orthe test suite - should be fixed ASAP. Don't let a test failjust to make it clear that something needs to be fixed somewhere.That's what the TODO lists are for.Add some comments to your tests to explain to others what it is you're testing. A long sequence of JDBC method calls and JUnitassertions can be hard to comprehend.For example, in the comments you can explain where a certain test condition originates from. Is it a JDBC requirement, PostgreSQL behaviour or the intended implementation of a feature?7 Example (incomplete)----------------------package org.postgresql.test.jdbc2;import org.postgresql.test.TestUtil;import junit.framework.TestCase;import java.sql.*;/* * Test case for ... */public class FooTest extends TestCase { private Connection con; private Statement stmt; public FooTest(String name) { super(name); } protected void setUp() throws Exception { con = TestUtil.openDB(); stmt = con.createStatement(); // Drop the test table if it already exists for some // reason. It is not an error if it doesn't exist. try { stmt.executeUpdate("DROP TABLE testfoo"); } catch (SQLException e) { // Intentionally ignore. We cannot distinguish // "table does not exist" from other errors, since // PostgreSQL doesn't support error codes yet. } stmt.executeUpdate( "CREATE TABLE testfoo(pk INTEGER, col1 INTEGER)"); stmt.executeUpdate("INSERT INTO testfoo VALUES(1, 0)"); // You may want to call con.setAutoCommit(false) at // this point, if most tests in this test case require // the use of transactions. } protected void tearDown() throws Exception { con.setAutoCommit(true); if (stmt != null) { stmt.executeUpdate("DROP TABLE testfoo"); stmt.close(); } if (con != null) { TestUtil.closeDB(con); } } public void testFoo() { // Use the assert methods in junit.framework.TestCase // for the actual tests // Just some silly examples assertNotNull(con); if (stmt == null) { fail("Where is my statement?"); } } public void testBar() { // Another test. }}8. Running the JDBC 2 test suite from Sun against PostgreSQL------------------------------------------------------------Download the test suite from http://java.sun.com/products/jdbc/jdbctestsuite-1_2_1.htmlThis is the JDBC 2 test suite that includes J2EE requirements.1. Configure PostgreSQL so that it accepts TCP/IP connections and start the server. Prepare PostgreSQL by creating two users (cts1 and cts2) and two databases (DB1 and DB2) in the cluster that is going to be used for JDBC testing.2. Download the latest release versions of the J2EE, J2SE, and JDBC test suite from Sun's Java site (http://java.sun.com), and install according to Sun's documentation.3. The following environment variables should be set: CTS_HOME=<path where JDBC test suite installed (eg: /usr/local/jdbccts)> J2EE_HOME=<path where J2EE installed (eg: /usr/local/j2sdkee1.2.1)> JAVA_HOME=<path where J2SE installed (eg: /usr/local/jdk1.3.1)> NO_JAVATEST=Y LOCAL_CLASSES=<path to PostgreSQL JDBC driver jar>4. In $J2EE_HOME/config/default.properties: jdbc.drivers=org.postgresql.Driver jdbc.datasources=jdbc/DB1|jdbc:postgresql://localhost:5432/DB1|jdbc/DB2|jdbc:postgresq://localhost:5432/DB2 Of course, if PostgreSQL is running on a computer different from the one running the application server, localhost should be changed to the proper host. Also, 5432 should be changed to whatever port PostgreSQL is listening on (5432 is the default). In $J2EE_HOME/bin/userconfig.sh: Add $CTS_HOME/lib/harness.jar, $CTS_HOME/lib/moo.jar, $CTS_HOME/lib/util.jar to J2EE_CLASSPATH. Also add the path to the PostgreSQL JDBC jar to J2EE_CLASSPATH. Set the JAVA_HOME variable to where you installed the J2SE. You should end up with something like this: CTS_HOME=/home/liams/linux/java/jdbccts J2EE_CLASSPATH=/home/liams/work/inst/postgresql-7.1.2/share/java/postgresql.jar:$CTS_HOME/lib/harness.jar:$CTS_HOME/lib/moo.jar:$CTS_HOME/lib/util.jar export J2EE_CLASSPATH JAVA_HOME=/home/liams/linux/java/jdk1.3.1 export JAVA_HOME In $CTS_HOME/bin/cts.jte: webServerHost=localhost webServerPort=8000 servletServerHost=localhost servletServerPort=80005. Start the application server (j2ee): $ cd $J2EE_HOME $ bin/j2ee -verbose The server can be stopped after the tests have finished: $ cd $J2EE_HOME $ bin/j2ee -stop6. Run the JDBC tests: $ cd $CTS_HOME/tests/jdbc/ee $ make jdbc-tests At the time of writing of this document, a great number of tests in this test suite fail.9 Credits, feedback-------------------The parts of this document describing the PostgreSQL test suite were originally written by Rene Pijlman. Liam Stewart contributed the section on the Sun JDBC 2 test suite.Please send your questions about the JDBC test suites or suggestionsfor improvement to the pgsql-jdbc@postgresql.org mailing list.The source of this document is maintained in src/interfaces/jdbc/org/postgresql/test/README in CVS. Patches forimprovement can be send to the mailing list pgsql-patches@postgresql.org.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?