2010-06-03 11 views

Répondre

14

J'utilise le Maven SQL Plugin

Vous êtes beaucoup mieux l'utiliser et en vous assurant que vous créez et remplissez vos tests avant, puis déposez après vos tests. Vous devez également utiliser créer ou remplacer, ou supprimer s'il existe dans votre script de création (en supposant que votre base de données le supporte) dans le cas où un test échoue et laisse la base de données dans un état incohérent.

+0

Pourriez-vous donner un exemple d'état incohérent de DB? Il sera abandonné lors des tests suivants ou en cours de nettoyage de toute façon. De plus, si vous utilisez la base de données de création dans le script de construction, vous perdez la possibilité d'exécuter un test spécifique à partir de l'EDI (au moins Eclipse), car vous devrez créer une base de données de test à la main. –

12

Il a fallu un peu de bidouillage, mais je l'ai eu pour déposer, créer et créer le schéma pour H2 et MySQL. Encore besoin de le terminer pour Oracle et SQL Server 2008. J'ai placé les commandes DROP et CREATE exactes dans les propriétés et dans certains cas (comme H2) nécessaires pour ignorer complètement la base de données de création. Voici à quoi il ressemble:

<plugin> 
    <!-- Used to automatically drop (if any) and create a database prior to running integration test cases. --> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>sql-maven-plugin</artifactId> 
    <dependencies> 
     <dependency> 
     <!-- Adds the correct JDBC driver as a dependency of this plugin --> 
     <groupId>${database.groupId}</groupId> 
     <artifactId>${database.artifactId}</artifactId> 
     <version>${database.version}</version> 
     </dependency> 
    </dependencies> 
    <configuration> 
     <!-- common configuration shared by all executions --> 
     <driver>${database.class}</driver> 
     <username>${database.username}</username> 
     <password>${database.password}</password> 
     <url>${database.url}</url> 
    </configuration> 
    <executions> 
     <execution> 
     <!-- Start by dropping the database (we'll leave it intact when finished) --> 
     <id>drop-db</id> 
     <phase>pre-integration-test</phase> 
     <goals> 
      <goal>execute</goal> 
     </goals> 
     <configuration> 
      <!-- Can't use regular URL in case database doesn't exist --> 
      <url>${database.url.alternate}</url> 
      <skip>${database.sqlDrop.skip}</skip> 
      <autocommit>true</autocommit> 
      <sqlCommand>${database.sqlDrop};</sqlCommand> 
      <onError>continue</onError> 
     </configuration> 
     </execution> 
     <execution> 
     <!-- then create a new database --> 
     <id>create-db</id> 
     <phase>pre-integration-test</phase> 
     <goals> 
      <goal>execute</goal> 
     </goals> 
     <configuration> 
      <!-- Can't use regular URL in case database doesn't exist --> 
      <url>${database.url.alternate}</url> 
      <skip>${database.sqlCreate.skip}</skip> 
      <autocommit>true</autocommit> 
      <sqlCommand>${database.sqlCreate};</sqlCommand> 
      <onError>continue</onError> 
     </configuration> 
     </execution> 
     <execution> 
     <!-- and finally run the schema creation script we just made with the hibernate3-maven-plugin --> 
     <id>create-schema</id> 
     <phase>pre-integration-test</phase> 
     <goals> 
      <goal>execute</goal> 
     </goals> 
     <configuration> 
      <skip>${database.sqlSchema.skip}</skip> 
      <autocommit>true</autocommit> 
      <srcFiles> 
      <srcFile>target/hibernate3/sql/create-${database.vendor}-schema.sql</srcFile> 
      </srcFiles> 
      <onError>continue</onError> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin>