Introduce unit tests framework
authorMathieu Baudier <mbaudier@argeo.org>
Sat, 10 Nov 2007 14:28:20 +0000 (14:28 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Sat, 10 Nov 2007 14:28:20 +0000 (14:28 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@697 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.slc/.classpath
org.argeo.slc/lib-src/dbunit-2.2-sources.jar [new file with mode: 0644]
org.argeo.slc/lib/dbunit-2.2.jar [new file with mode: 0644]
org.argeo.slc/src/main/java/org/argeo/slc/unit/DbModel.java [new file with mode: 0644]
org.argeo.slc/src/main/java/org/argeo/slc/unit/IndependentDbTestCase.java [new file with mode: 0644]
org.argeo.slc/src/main/java/org/argeo/slc/unit/SpringBasedTestCase.java [new file with mode: 0644]

index fc54474e72ad673d1b7cc20ec2af9f7a5b49e424..a5410a071cdc96b822853ef1c2d13df056d0a8b6 100644 (file)
@@ -20,6 +20,7 @@
        <classpathentry kind="lib" path="lib/hibernate3.jar"/>\r
        <classpathentry kind="lib" path="lib/hsqldb.jar"/>\r
        <classpathentry kind="lib" path="lib/jta.jar"/>\r
+       <classpathentry kind="lib" path="lib/dbunit-2.2.jar" sourcepath="lib-src/dbunit-2.2-sources.jar"/>\r
        <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3"/>\r
        <classpathentry kind="output" path="target/classes"/>\r
 </classpath>\r
diff --git a/org.argeo.slc/lib-src/dbunit-2.2-sources.jar b/org.argeo.slc/lib-src/dbunit-2.2-sources.jar
new file mode 100644 (file)
index 0000000..e22c257
Binary files /dev/null and b/org.argeo.slc/lib-src/dbunit-2.2-sources.jar differ
diff --git a/org.argeo.slc/lib/dbunit-2.2.jar b/org.argeo.slc/lib/dbunit-2.2.jar
new file mode 100644 (file)
index 0000000..6db27bc
Binary files /dev/null and b/org.argeo.slc/lib/dbunit-2.2.jar differ
diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/unit/DbModel.java b/org.argeo.slc/src/main/java/org/argeo/slc/unit/DbModel.java
new file mode 100644 (file)
index 0000000..742d13e
--- /dev/null
@@ -0,0 +1,36 @@
+package org.argeo.slc.unit;\r
+\r
+import java.sql.Connection;\r
+import java.util.List;\r
+import java.util.Properties;\r
+\r
+import org.hibernate.cfg.Configuration;\r
+import org.hibernate.cfg.Environment;\r
+import org.hibernate.tool.hbm2ddl.SchemaExport;\r
+\r
+public class DbModel {\r
+       private String dialect;\r
+       private List<String> mappings;\r
+\r
+       public void setDialect(String dialect) {\r
+               this.dialect = dialect;\r
+       }\r
+\r
+       public void setMappings(List<String> mappings) {\r
+               this.mappings = mappings;\r
+       }\r
+\r
+       public SchemaExport createSchemaExport(Connection connection) {\r
+               Configuration configuration = new Configuration();\r
+               Properties properties = new Properties();\r
+               properties.setProperty(Environment.DIALECT, dialect);\r
+               properties.setProperty(Environment.HBM2DDL_AUTO, "create");\r
+               configuration.setProperties(properties);\r
+\r
+               for (String mapping : mappings) {\r
+                       configuration.addResource(mapping.trim());\r
+               }\r
+\r
+               return new SchemaExport(configuration, connection);\r
+       }\r
+}\r
diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/unit/IndependentDbTestCase.java b/org.argeo.slc/src/main/java/org/argeo/slc/unit/IndependentDbTestCase.java
new file mode 100644 (file)
index 0000000..cbebeff
--- /dev/null
@@ -0,0 +1,91 @@
+package org.argeo.slc.unit;\r
+\r
+import java.io.InputStream;\r
+import java.sql.SQLException;\r
+\r
+import javax.sql.DataSource;\r
+\r
+import org.dbunit.DataSourceDatabaseTester;\r
+import org.dbunit.DatabaseUnitException;\r
+import org.dbunit.IDatabaseTester;\r
+import org.dbunit.database.IDatabaseConnection;\r
+import org.dbunit.dataset.IDataSet;\r
+import org.dbunit.dataset.xml.FlatXmlDataSet;\r
+import org.dbunit.operation.DatabaseOperation;\r
+import org.springframework.core.io.ClassPathResource;\r
+import org.springframework.core.io.Resource;\r
+\r
+import org.hibernate.tool.hbm2ddl.SchemaExport;\r
+\r
+import org.argeo.slc.core.SlcException;\r
+\r
+public class IndependentDbTestCase extends SpringBasedTestCase {\r
+       private IDatabaseTester databaseTester;\r
+\r
+       @Override\r
+       protected void setUp() throws Exception {\r
+               super.setUp();\r
+\r
+               databaseTester = new DataSourceDatabaseTester(getDataSource());\r
+               databaseTester.setSetUpOperation(new DatabaseOperation() {\r
+\r
+                       @Override\r
+                       public void execute(IDatabaseConnection connection, IDataSet dataSet)\r
+                                       throws DatabaseUnitException, SQLException {\r
+                               DbModel dbModel = getDbModel();\r
+                               SchemaExport schemaExport = dbModel\r
+                                               .createSchemaExport(connection.getConnection());\r
+                               schemaExport.create(true, true);\r
+\r
+                               DatabaseOperation.INSERT.execute(connection, dataSet);\r
+                       }\r
+\r
+               });\r
+               databaseTester.setDataSet(createDataSet());\r
+               databaseTester.onSetup();\r
+       }\r
+\r
+       @Override\r
+       protected void tearDown() throws Exception {\r
+               if (databaseTester != null) {\r
+                       databaseTester.onTearDown();\r
+               }\r
+               super.tearDown();\r
+       }\r
+\r
+       protected DataSource getDataSource() {\r
+               return (DataSource) getApplicationContext().getBean(\r
+                               getDataSourceBeanName());\r
+       }\r
+\r
+       protected String getDataSourceBeanName() {\r
+               return "dataSource";\r
+       }\r
+\r
+       protected IDataSet createDataSet() {\r
+               try {\r
+                       InputStream in = getDataSetResource().getInputStream();\r
+                       IDataSet dataSet = new FlatXmlDataSet(in);\r
+                       in.close();\r
+                       return dataSet;\r
+               } catch (Exception e) {\r
+                       throw new SlcException("Cannot create data set", e);\r
+               }\r
+       }\r
+\r
+       protected Resource getDataSetResource() {\r
+               return new ClassPathResource(getDataSetResourceLocation());\r
+       }\r
+\r
+       protected String getDataSetResourceLocation() {\r
+               return inPackage("dataSet.xml");\r
+       }\r
+\r
+       protected DbModel getDbModel() {\r
+               return (DbModel) getApplicationContext().getBean(getDbModelBeanName());\r
+       }\r
+\r
+       protected String getDbModelBeanName() {\r
+               return "dbModel";\r
+       }\r
+}\r
diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/unit/SpringBasedTestCase.java b/org.argeo.slc/src/main/java/org/argeo/slc/unit/SpringBasedTestCase.java
new file mode 100644 (file)
index 0000000..f5ec0e1
--- /dev/null
@@ -0,0 +1,36 @@
+package org.argeo.slc.unit;\r
+\r
+import org.springframework.context.ApplicationContext;\r
+import org.springframework.context.support.ClassPathXmlApplicationContext;\r
+\r
+import junit.framework.TestCase;\r
+\r
+public class SpringBasedTestCase extends TestCase {\r
+       private ApplicationContext context;\r
+\r
+       /**\r
+        * Gets (and create if necessary) the application context to use. Default\r
+        * implementation uses a class path xml application context and calls\r
+        * {@link #getApplicationContextLocation()}.\r
+        */\r
+       protected ApplicationContext getApplicationContext() {\r
+               if (context == null) {\r
+                       context = new ClassPathXmlApplicationContext(\r
+                                       getApplicationContextLocation());\r
+               }\r
+               return context;\r
+       }\r
+\r
+       /**\r
+        * Get the application context location used by the default implementation\r
+        * of {@link #getApplicationContext()}.\r
+        */\r
+       protected String getApplicationContextLocation() {\r
+               return inPackage("applicationContext.xml");\r
+       }\r
+       \r
+       protected String inPackage(String suffix){\r
+               String prefix = getClass().getPackage().getName().replace('.', '/');\r
+               return prefix+'/'+suffix;\r
+       }\r
+}\r