A notre avis, nous avons une couche de service qui prend en charge une requête XML, accède à diverses procédures stockées (SP) via JDBC, traite les données et répond avec une réponse XML. Dernièrement, les gens ont commencé à adopter MockRunner dans leurs tests JUnit pour se moquer des réponses des SP.Pourquoi est-ce que j'utiliserais MockRunner plutôt qu'une injection de dépendances normale/manuelle?
MockConnection connection = new MockConnection();
MockContextFactory.setAsInitial();
InitialContext context = new InitialContext();
context.rebind(READ_PAYMENT_DATA_SOURCE, getDS());
getDS().setupConnection(connection);
m_csStatementHandler = connection.getCallableStatementResultSetHandler();
m_csStatementHandler.clearResultSets();
m_csStatementHandler.clearCallableStatements();
m_csStatementHandler.setExactMatch(false);
m_csStatementHandler.prepareReturnsResultSet(READ_PAYMENT, true);
m_csStatementHandler.setExactMatch(false);
m_csStatementHandler.setExactMatchParameter(false);
Map parameterMap = new HashMap();
parameterMap.put(new Integer(1), null);
parameterMap.put(new Integer(2), null);
parameterMap.put(new Integer(3), null);
parameterMap.put(new Integer(4), null);
m_csStatementHandler.prepareOutParameter(READ_PAYMENT, parameterMap);
//Set up the cursor of applications for return.
MockResultSet resultApps = m_csStatementHandler.createResultSet();
resultApps.addRow(getPaymentSchedule("E", "Monthly", new Short("1"),null,null,null,null,null,null,null));
resultApps.addRow(getPaymentSchedule("A", "Weekly", new Short("1"),null,null,null,null,null,null,null));
resultApps.addRow(getPaymentSchedule("R", "Yearly", new Short("1"),null,null,null,null,null,null,null));
resultApps.addRow(getPaymentSchedule("S", "Weekly", new Short("1"),null,null,null,null,null,null,null));
resultApps.addRow(getPaymentSchedule("W", "Monthly", new Short("1"),null,null,null,null,null,null,null));
MockResultSet[] results = new MockResultSet[1];
results[0] = resultApps;
m_csStatementHandler.prepareResultSet(READ_PAYMENT, resultApps);
Le code ci-dessus est terrible pour de nombreuses raisons, mais il ne montre clairement la complexité et: le code pour configurer les réponses de l'SP raillé à l'aide MockRunner est horrible (ce qui est la première classe de test aléatoire j'ai ouvert) surcharge de la configuration d'une réponse à partir des procédures stockées. À ce jour, j'ai utilisé l'injection de dépendance roulée à la main pour injecter la classe qui appelle réellement la procédure stockée. Tout ce que j'ai à faire est de créer une classe d'appel simulateur SP (responsable de l'exécution réelle du SP) et définir mes données de réponse souhaitées. Je suis très heureux avec cette technique et son beaucoup plus simple que ce qui précède que ses données se concentrent plutôt que de se soucier des détails de mise en œuvre. Mais ma question est, quand voudriez-vous utiliser MockRunner? Cela semble exagéré pour les tests unitaires, alors je suppose que c'est plus pour l'intégration ou le test du système? Et même alors, il me semble encore plus facile d'utiliser un cadre DI pour échanger la classe de l'appelant SP puis pour installer tout le code ci-dessus pour chaque appel de procédure stockée. S'il vous plaît éclairer! Merci
Merci pour votre inscription. Je connais Mockito que j'aime beaucoup. –