10
votes

Cas de test Junit pour la méthode d'insertion de base de données avec DAO et Web Service

Je suis en train de mettre en œuvre un système de gestion universitaire basé sur le WebService. Ce système ajoute certains cours à la base de données. Voici ci-dessous, le code que j'utilise.

cours.java xxx

puis un autre fichier est comme ci-dessous

coursedaoimpl.java xxx

Le troisième est le fichier de service Web comme suit qui interagit avec les deux précédents et ajoute des données à la base de données.

courseService.java xxx

regarder mes annonces de code peut-on me suggérer comment puis-je écrire étui de test pour ma méthode d'addition. Je suis totalement débutant pour Java, j'ai pris de l'aide de mes amis pour apprendre cette partie de Java et je dois maintenant mettre en œuvre un test Junit pour mes méthodes de base de données, telles que l'ajout de cours ci-dessus.

veuillez suggérer une chose que je peux apprendre, Lire et utiliser pour mettre en œuvre des tests Junit pour mes méthodes de base de données.


0 commentaires

4 Réponses :


5
votes

La conception de vos classes permettra de les tester. En utilisant des chaînes de connexion codées ou une instanciation des collaborateurs dans vos méthodes avec Nouveau peut être considérée comme des anticiperns testés. Regardez le dépendencynjection motif. Les cadres tels que printemps pourraient être utiles ici.

Pour que votre DAO testé, vous devez avoir le contrôle de votre connexion de base de données dans vos tests d'unités. Donc, la première chose que vous voudriez faire est de l'extraire de votre DAO dans une classe que vous pouvez moquer ou signalez une base de données de test spécifique, que vous pouvez configurer et inspecter avant et après l'exécution de vos tests.

Une solution technique pour tester le code DB / DAO pourrait être dbunit . Vous pouvez définir vos données de test dans un XML SCHEMA-MOINS SCHUNIT et laisser DBUnit le peupler dans votre base de données de test. Mais vous devez toujours tout câbler vous-même. Avec le printemps Cependant, vous pouvez utiliser quelque chose comme Spring-test-dbunit qui vous donne beaucoup de levier et outillage supplémentaire.

Lorsque vous vous appelez un débutant total, je soupçonne que tout cela est très décourageant. Vous devez vous demander si vous avez vraiment besoin de tester votre code de base de données. Sinon, vous devriez au moins refactuer votre code, vous pouvez donc facilement vous moquer de tout accès à la base de données. Pour la moqueur en général, consultez Mockito .


1 commentaires

Merci pour l'aide, même je n'ai jamais travaillé avec des sources. Je ne sais pas grand chose si vraiment je devrais tester mon code ou non, mais mes partenaires de projet doivent le faire et on m'a confié la tâche de le faire. Toute façon Merci pour l'aide. Je l'attends.



-5
votes

/ *

classe publique userDao { xxx

}


0 commentaires

22
votes

Il s'agit d'un exemple de test DAO à l'aide du projet JUNIT au printemps.

import java.util.List;

import junit.framework.Assert;

import org.jboss.tools.example.springmvc.domain.Member;
import org.jboss.tools.example.springmvc.repo.MemberDao;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:test-context.xml",
"classpath:/META-INF/spring/applicationContext.xml"})
@Transactional
@TransactionConfiguration(defaultRollback=true)
public class MemberDaoTest
{
    @Autowired
    private MemberDao memberDao;

    @Test
    public void testFindById()
    {
        Member member = memberDao.findById(0l);

        Assert.assertEquals("John Smith", member.getName());
        Assert.assertEquals("john.smith@mailinator.com", member.getEmail());
        Assert.assertEquals("2125551212", member.getPhoneNumber());
        return;
    }

    @Test
    public void testFindByEmail()
    {
        Member member = memberDao.findByEmail("john.smith@mailinator.com");

        Assert.assertEquals("John Smith", member.getName());
        Assert.assertEquals("john.smith@mailinator.com", member.getEmail());
        Assert.assertEquals("2125551212", member.getPhoneNumber());
        return;
    }

    @Test
    public void testRegister()
    {
        Member member = new Member();
        member.setEmail("jane.doe@mailinator.com");
        member.setName("Jane Doe");
        member.setPhoneNumber("2125552121");

        memberDao.register(member);
        Long id = member.getId();
        Assert.assertNotNull(id);

        Assert.assertEquals(2, memberDao.findAllOrderedByName().size());
        Member newMember = memberDao.findById(id);

        Assert.assertEquals("Jane Doe", newMember.getName());
        Assert.assertEquals("jane.doe@mailinator.com", newMember.getEmail());
        Assert.assertEquals("2125552121", newMember.getPhoneNumber());
        return;
    }

    @Test
    public void testFindAllOrderedByName()
    {
        Member member = new Member();
        member.setEmail("jane.doe@mailinator.com");
        member.setName("Jane Doe");
        member.setPhoneNumber("2125552121");
        memberDao.register(member);

        List<Member> members = memberDao.findAllOrderedByName();
        Assert.assertEquals(2, members.size());
        Member newMember = members.get(0);

        Assert.assertEquals("Jane Doe", newMember.getName());
        Assert.assertEquals("jane.doe@mailinator.com", newMember.getEmail());
        Assert.assertEquals("2125552121", newMember.getPhoneNumber());
        return;
    }
}


5 commentaires

Dans la méthode de test Testerregister () Vous utilisez la méthode DAO NEWMember = Memberdao.FindByID (ID) , après avoir effectué MemberDao.register (membre) Est-ce la bonne façon de le faire? Je pense que vous devez essayer de récupérer les valeurs de la base de données et de faire valoir ces valeurs. Parce que tous les bugs de Memberdao.findbyID (ID) peuvent avoir des effets secondaires sur votre testregister () méthode.


@HARIKRISHNAGANJI Je pense que c'est vrai. En utilisant FindById (ID) , après avoir appelé Enregistrer , vous testez réellement FindById et non Enregistrer . Et cela pourrait affecter lorsque enregistrer échoue à saisir certaines valeurs (buggy) et FindById renvoie certaines valeurs par défaut (buggy), et peut donc ne pas être attrapé.


Quelqu'un peut-il expliquer - Qu'est-ce que "CLASSPATH: test-context.xml" et ce qui devrait être dans ce fichier?


J'ai un petit doute. Dans ce scénario, lorsque nous construisons le projet à chaque fois que la valeur est insérée dans toutes les tables de la base de données. (Considérant que toutes les méthodes d'insertion ont des cas de test.) Il peut y avoir plus d'un cas de test et chaque construction insérera des valeurs à la base de données. Je ne pense pas que ce sera un bon. (Dans l'environnement de production)


@Crocode, juste une pensée. Commencez par exécuter la TESTCASE POUR TESTFINDBYID () Si elle réussit, alors nous devons exécuter des tests pour TESTRISTER (). Pouvons-nous faire comme ça? Quoi qu'il en soit, s'il n'arrive pas à aller chercher les données à l'aide de TestFindyID (), la construction ne réussira pas.



2
votes
@Test
public void testSearchManagementStaff() throws SQLException
{
    boolean res=true;
    ManagementDaoImp mdi=new ManagementDaoImp();
    boolean b=mdi.searchManagementStaff("abc@gmail.com"," 123456");
    assertEquals(res,b);
}

0 commentaires