Classe de test avec héritage et appel du constructeur
Salut,
J'essaye d'implémenter un Junit qui au démarrage charge la base de donnée oracle, exécute un traitement, les tests puis fait le ménage dans la base.
Je dois faire plusieurs tests similaires avec quelques petits delta, j'ai donc décider de mutualiser dans une classe mère :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
public abstract class BatchTest {
private Connection connection = null;
public BatchTest(String configFile, String dataFile){
try{
loadData(configFile, dataFile);
}catch (Exception e) {
e.printStackTrace();
}
}
private void loadData(String configFile, String dataFile)throws Exception {
File aPropertyFile = new File(configFile);
FileInputStream anFileInputStream = new FileInputStream(aPropertyFile);
PropertyResourceBundle aResource = new PropertyResourceBundle(anFileInputStream);
String nomDriver = aResource.getString("driverName");
String url = aResource.getString("url");
String login = aResource.getString("login");
String password = aResource.getString("password");
RandomAccessFile myAcces = null;
File myFile = new File(dataFile);
String aLine = null;
PreparedStatement aStatement = null;
try{
Class.forName(nomDriver);
}catch(ClassNotFoundException cnfe){
System.out.println("La classe "+nomDriver+" n'a pas été trouvée");
cnfe.printStackTrace();
}
try{
connection = DriverManager.getConnection(url,login,password);
connection.setAutoCommit(false);
myAcces = new RandomAccessFile(myFile,"r");
aLine = myAcces.readLine();
//chargement des données de test
while(aLine != null && !aLine.equals("")){
aStatement = connection.prepareStatement(aLine);
aStatement.executeUpdate();
aStatement.close();
aLine = myAcces.readLine();
}
connection.commit();
}
catch(SQLException sqle){
connection.rollback();
System.out.println("Exception SQL : ");
while (sqle != null) {
String message = sqle.getMessage();
String sqlState = sqle.getSQLState();
int errorCode = sqle.getErrorCode();
System.out.println("Message = "+message);
System.out.println("SQLState = "+sqlState);
System.out.println("ErrorCode = "+errorCode);
sqle.printStackTrace();
sqle = sqle.getNextException();
}
}
catch(FileNotFoundException fe) {
connection.rollback();
System.out.println("Fichier" + myFile.toString() + " non trouvé");
}
finally{
myAcces.close();
}
}
@AfterClass
private void clean() throws Exception {
try {
if(!connection.isClosed()) {
cleanData(connection);
}
}catch(SQLException sqle){
connection.rollback();
System.out.println("Exception SQL : ");
while (sqle != null) {
String message = sqle.getMessage();
String sqlState = sqle.getSQLState();
int errorCode = sqle.getErrorCode();
System.out.println("Message = "+message);
System.out.println("SQLState = "+sqlState);
System.out.println("ErrorCode = "+errorCode);
sqle.printStackTrace();
sqle = sqle.getNextException();
}
}
finally{
if(!connection.isClosed()){
try{
connection.commit();
connection.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
protected abstract void cleanData(Connection connection) throws SQLException; |
Une classe fille :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
public class CableFilleTests extends BatchTest{
public CableFilleTests () {
super("", "");
}
protected void cleanData(Connection connection) throws SQLException {
}
@Test
public void cas1() {
}
@Test
public void cas2() {
} |
Mon souci est que le constructeur est lancé à chaque test par Junit, provocant un chargement de la base à chaque fois(qui plante évidemment) comment je fais pour lui faire comprendre que je ne veux pas ?!
merci d'avance.