Running Unit Tests

Cayenne provides a comprehensive suite of unit tests. To execute unit tests you must first get Cayenne from Git, install JDK 1.8 and obtain the latest Maven.

Prerequisites

Maven build prerequisites and recommended settings apply here.

Running Against Embedded HSQLDB

No extra setup is required. Just run Maven:

$ cd cayenne
$ mvn install

or

$ cd cayenne
$ mvn clean verify

Running Against In-memory Database

Besides HSQLDB mentioned above Cayenne has preconfigured connection information for following databases that support in-memory mode:

  • derby
  • h2
  • sqlite

For this databases you can run tests without any additional configuration by only specifying cayenneTestConnection property that will activate required Maven profile:

$ mvn verify -DcayenneTestConnection=derby    

Running Against Database in Docker

(Before Cayenne 4.2)

Another handy option to run Cayenne tests is with preconfigured docker profiles. The only thing you need is to install Docker.

You can run tests using following cayenneTestConnection properties:

  • mysql-docker
  • postgres-docker
  • sqlserver-docker

Like with in-memory databases no additional setup is required:

$ mvn verify -DcayenneTestConnection=mysql-docker   

Running Against Database with TestContainer

(Since Cayenne 4.2)

Another handy option to run Cayenne tests is with TestContainer which use Docker. The only thing you need is to install Docker and run it.

You can run tests using following cayenneTestConnection properties:

  • mysql-tc
  • postgres-tc
  • sqlserver-tc
  • mariadb-tc
  • oracle-tc
  • db2-tc

Like with in-memory databases no additional setup is required:

$ mvn verify -DcayenneTestConnection=mysql-tc   

Running Against a Specific Database

Final option to run tests against any supported database is with manual configuration.

Step 1. Install JDBC Driver Jars in a Local Maven Repo

Most commercial drivers are not present in the public Maven repositories. So they have to be installed by the tester locally. The group and artifact ids are arbitrarily assigned in the main Cayenne POM, so users must follow the POM or the examples below.

FrontBase:

$ mvn install:install-file -Dfile=frontbasejdbc.jar -DgroupId=com.frontbase \
       -DartifactId=frontbase-driver -Dversion=4.1 -Dpackaging=jar -DgeneratePom=true

OpenBase:

$ mvn install:install-file -Dfile=OpenBaseJDBC.jar -DgroupId=com.openbase \
       -DartifactId=openbase-driver -Dversion=9 -Dpackaging=jar -DgeneratePom=true

Oracle:

$ mvn install:install-file -Dfile=ojdbc5.jar -DgroupId=com.oracle \
       -DartifactId=oracle-driver -Dversion=11 -Dpackaging=jar -DgeneratePom=true

Sybase:

$ mvn install:install-file -Dfile=jconn3.jar -DgroupId=com.sybase \
       -DartifactId=sybase-driver -Dversion=12 -Dpackaging=jar -DgeneratePom=true
Step 2. Run Tests Against Configured Data Source

Database type and connection information can be specified either on the command line or via a configuration file. First let’s look at the command line options:

$ mvn verify -DcayenneTestConnection=<profile_name> \
   -DcayenneAdapter=org.apache.cayenne.dba.mysql.MySQLAdapter \
   -DcayenneJdbcUsername=myuser \
   -DcayenneJdbcPassword=mypassword \
   -DcayenneJdbcUrl=jdbc:mysql://localhost/cayenne \
   -DcayenneJdbcDriver=com.mysql.jdbc.Driver

cayenneTestConnection is a property activating a DB-specific Maven profile. <profile_name> can be one of:

  • db2
  • derby
  • firebird
  • frontbase
  • h2
  • ingres
  • mysql
  • openbase
  • oracle
  • postgres
  • sqlite
  • sqlserver
  • sybase

Another way to store this information permanently for each profile is to create a directory $HOME/.cayenne/ and place a file called connection.properties in this directory. File contents should be similar to this example:

mysql.cayenne.adapter = org.apache.cayenne.dba.mysql.MySQLAdapter
mysql.jdbc.username = someuser
mysql.jdbc.password = somepasswd
mysql.jdbc.url = jdbc:mysql://mysql.host:3306/test_db?useUnicode=true&characterEncoding=UTF-8&generateSimpleParameterMetadata=true
mysql.jdbc.driver = com.mysql.jdbc.Driver

postgres.adapter = org.apache.cayenne.dba.postgres.PostgresAdapter
postgres.jdbc.username = someuser
postgres.jdbc.password = somepasswd
postgres.jdbc.url = jdbc:postgresql://postgresql.host:5432/test_db
postgres.jdbc.driver = org.postgresql.Driver

oracle.cayenne.adapter = org.apache.cayenne.dba.oracle.OracleAdapter
oracle.jdbc.username = someuser
oracle.jdbc.password = somepasswd
oracle.jdbc.url = jdbc:oracle:thin:@//oracle.host:1521/XE
oracle.jdbc.driver = oracle.jdbc.driver.OracleDriver

sqlserver.adapter = org.apache.cayenne.dba.sqlserver.SQLServerAdapter
sqlserver.jdbc.url = jdbc:sqlserver://sqlserver.host:1433;databaseName=test_db
sqlserver.jdbc.driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
sqlserver.jdbc.username = someuser
sqlserver.jdbc.password = somepasswd

db2.adapter = org.apache.cayenne.dba.db2.DB2Adapter
db2.jdbc.username = someuser
db2.jdbc.password = somepasswd
db2.jdbc.url = jdbc:db2://db2.host:50000/test_db
db2.jdbc.driver = com.ibm.db2.jcc.DB2Driver

Each property starts with the Maven profile name (“mysql” and “oracle” in the example above). Note that in this case you should still use cayenneTestConnection. E.g.:

$ mvn verify -DcayenneTestConnection=mysql