2 votes

Création d'un objet ResultSet par moi-même

Je veux créer une classe de test pour une classe, qui lit des données à partir d'une base de données et les convertit. La classe de test devrait tester cette fonction de conversion. Mais pour pouvoir tester cette fonction, j'ai besoin d'un objet ResultSet.

Comment puis-je remplir des données dans l'objet ResultSet sans connexion à une base de données?

1voto

Mik378 Points 9437

Lire à partir des bases de données concerne les tests d'intégration, pas les tests unitaires. Ainsi, vous pouvez et devez utiliser le ResultSet d'origine car un test d'intégration prend en compte de vrais backends (comme votre base de données).

Si vous essayez de tester votre logique unitaire, simulez ou moquez la partie spécifique de votre DAO appelée afin de renvoyer des données d'exemple à tester. Mais ne faites pas appel à la base de données (ne traitez pas le ResultSet) du tout dans ce cas.

1voto

AlexWien Points 15259

Quelque chose de similaire au code ci-dessous : Vous avez besoin d'une interface pour accéder à votre base de données. Cette interface est utilisée dans le code et le code de test : myDbConnectionMock est un objet Mock qui a la même interface que la connexion à la base de données, mais c'est un objet que vous créez et dans lequel vous pouvez remplir ce que vous voulez :

Je n'utiliserais pas Mockito ou pire EasyMock.

Le code que j'ai tapé dans l'éditeur de texte (espérons que ce soit compilable, peut-être pas) :

public void testDBConnection() {

  IDataBaseConnection conn = new MyDbConnectionMock();

  conn.connect();
  Set result = conn.readData();

  assertTrue(result.size > 0);
}

 // Interface pour la connexion à la base de données, adaptée à la vraie connexion à la base de données
    public interface IDataBaseConnection {
       boolean connect();
       Set readData();
    }

et

// Mock de connexion à la base de données
class MyDbConnectionMock implements IDbConnection {
  public void connect() {
     retourner vrai;
  }

  public Set readData() {
     Set resultSet = new HashSet();
     Result res1 = new Result(20);
     resultSet.add(res1);

     Result res1 = new Result(30);
     resultSet.add(res2);
     return resultSet;
   }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X