Avant-propos
Lorsque nous apprenions Java, les enseignants ou les livres généraux écrivaient qu'il existe huit types de base de Java. Ce sont : byte, int, short, long, float, double, char, boolean. Cependant, ce matin, alors que je lisais la Bible Java - "Penser en Java", j'ai découvert que l'auteur avait également mis le vide dans l'explication des types de données. Il en existe donc neuf sortes. Après une recherche sur Baidu, certains livres indiquent également que Java possède neuf types de base.
La couche Service de Java aura de nombreuses méthodes de type void, telles que save* et update*. Ces méthodes n'effectuent que quelques mises à jour et n'auront pas de valeur de retour. Son test unique ne peut pas être écrit en fonction de la valeur de retour de. la méthode. , seules les méthodes spéciales peuvent être utilisées ;
Cet environnement de méthode : Mockito, testng
Méthode testée :
La méthode VOID que vous souhaitez tester Java
@Override public void updateRuleName(Long ruleId, String newRuleName, Long ucId) { Assert.notNull(ruleId, "规则ID不能为Null"); Assert.notNull(newRuleName, "规则名称不能为Null"); Assert.notNull(ucId, "操作人的UCID不能为Null"); String cleanNewRuleName = StringUtils.trim(newRuleName); if (StringUtils.isBlank(cleanNewRuleName)) { throw new IllegalArgumentException("新的规则名称不能为空"); } // 查询规则对象 Rule rule = queryRuleById(ruleId); if (null == rule) { throw new IllegalDataException("没有查到该规则"); } rule.setRuleId(ruleId); rule.setRuleName(cleanNewRuleName); rule.setUpdateUcid(ucId); rule.setUpdateTime(new Date()); ruleDao.updateSelective(rule); }
Méthode de test :
La méthode renvoyée par les tests void Java
@Test public void testUpdateRuleName() { Long ruleId = 1L; String newRuleName = "newRuleName"; Long ucId = 123L; List<Rule> rules = new ArrayList<Rule>(); Rule rule = new Rule(); rule.setRuleStatus((byte) DBValueSetting.RULE_STATUS_TAKE_EFFECT); rules.add(rule); // 查询规则对象 Map<String, Object> params = new HashMap<String, Object>(); params.put("ruleId", ruleId); Mockito.when(ruleDao.queryRulesByCondition(params)).thenReturn(rules); Mockito.doAnswer(new Answer<Object>() { public Object answer(InvocationOnMock invocation) { // 断点2:这里随后执行 Rule rule = (Rule) invocation.getArguments()[0]; Assert.assertTrue(rule.getRuleName().equals("newRuleName")); return null; } }).when(ruleDao).updateSelective(Mockito.any(Rule.class)); // 断点1:先执行到这里 ruleService.updateRuleName(ruleId, newRuleName, ucId); }
Comme indiqué dans les commentaires, si deux points d'arrêt sont ajoutés, pendant le processus d'exécution, exécutez le dernière ligne d'appel. Lors de l'exécution du point de terminaison 1, le stub du point de terminaison 2 sera exécuté. À ce moment, les paramètres d'entrée de l'exécution de la méthode peuvent être obtenus au point d'arrêt 2 et les paramètres d'entrée peuvent être vérifiés par assert pour atteindre l'objectif ;
new Anwer est une interface avec une seule méthode, qui est utilisée pour définir l'entrée d'exécution du proxy pour les appels de méthode
implémentation de doAnswer Java
public interface Answer<T> { /** * @param invocation the invocation on the mock. * * @return the value to be returned * * @throws Throwable the throwable to be thrown */ T answer(InvocationOnMock invocation) throws Throwable; }
Quand Lorsque le code est exécuté sur " RuleDao.updateSelective(rule); ", l'intercepteur appelé pour l'objet fictif sera déclenché Dans l'intercepteur, un proxy dynamique sera créé. L'invocation du proxy dynamique est la méthode. couvert dans la nouvelle réponse ;
Utilisez les méthodes d'interception et de proxy pour réaliser le réglage et l'acquisition des paramètres d'entrée et de sortie de la méthode d'objet fictif. En utilisant cette méthode, vous pouvez vérifier l'appel de classe d'exécution à l'intérieur de la méthode VOID ;
Résumé
Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article pourra apporter de l'aide aux études ou au travail de chacun. Si vous avez des questions, vous pouvez laisser un message. pour communiquer.
Pour des explications plus détaillées sur les méthodes de type vide à test unique Java et les articles connexes, veuillez faire attention au site Web PHP chinois !