mot-clé vide
Cette section explique comment déclarer et appeler une méthode void.
L'exemple suivant déclare une méthode nommée printGrade et l'appelle pour imprimer la note donnée.
Exemple
public class TestVoidMethod { public static void main(String[] args) { printGrade(78.5); } public static void printGrade(double score) { if (score >= 90.0) { System.out.println('A' }) else if (score >= 80,0) { System.out.println('B' } else if (score >= 70,0) { System.out.println('C'); } else if (score >= 60,0) { System.out.println('D'); else { System.out.println('F'); }}
Les résultats de compilation et d'exécution de l'exemple ci-dessus sont les suivants :
C
La méthode printGrade ici est une méthode de type void et elle ne renvoie pas de valeur.
Un appel à une méthode void doit être une instruction. Par conséquent, il est appelé comme instruction dans la troisième ligne de la méthode principale. Comme toute instruction se terminant par un point-virgule.
Méthode unique pour tester le type de vide
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. Le test unique ne peut pas être écrit en fonction de la valeur de retour de la méthode et peut. utilisez uniquement des méthodes spéciales.
Environnement pour cette méthode : Mockito, testng
Méthodes testées :
La méthode VOID que vous souhaitez tester
@Override public void updateRuleName(Long RuleId, String newRuleName, Long ucId) { Assert.notNull(ruleId, "L'ID de règle ne peut pas être Null"); notNull( ucId, "L'UCID de l'opérateur ne peut pas être nul"); String cleanNewRuleName = StringUtils.trim(newRuleName); if (StringUtils.isBlank(cleanNewRuleName)) { throw new IllegalArgumentException("Le nouveau nom de règle ne peut pas être vide"); // Objet de règle de requête Rule Rule = queryRuleById(ruleId); = règle) { throw new IllegalDataException("La règle n'a pas été trouvée" } règle.setRuleId(ruleId); règle.setRuleName(cleanNewRuleName); règle.setUpdateUcid(ucId); règle.setUpdateTime(new Date());
Méthode d'essai :
test de la méthode de retour nul
@Test public void testUpdateRuleName() { Long RuleId = 1L; String newRuleName = "newRuleName"; Long ucId = 123L; List<Rule> règles = new ArrayList<Rule>(); ((octet) DBValueSetting.RULE_STATUS_TAKE_EFFECT); règles.add(rule); Objet de règle de requête Map<String, Object> params = new HashMap<String, Object>(); params.put("ruleId", RuleId).when(ruleDao.queryRulesByCondition(params)).thenReturn(rules); .doAnswer(new Answer<Object>() { réponse d'objet public (invocation InvocationOnMock) { // Point d'arrêt 2 : Règle = (Rule) invocation.getArguments()[0]; Assert.assertTrue(rule.getRuleName().equals("newRuleName")).when(ruleDao ).updateSelective( Mockito.any(Rule.class)); // Point d'arrêt 1 : exécutez ici d'abord RuleService.updateRuleName(ruleId, newRuleName, ucId); }
Comme indiqué dans les commentaires, si deux points d'arrêt sont ajoutés, la dernière ligne appelante sera exécutée en premier lors de l'exécution. Lors de l'exécution du point de terminaison 1, le stub du point de terminaison 2 sera exécuté à ce moment-là, il pourra être obtenu au point d'arrêt 2. . Accédez aux paramètres d'entrée de l'exécution de la méthode et effectuez une vérification d'assertion sur les paramètres d'entrée 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
public interface Answer<T> { /** * @param invocation l'invocation sur le mock. * * @return la valeur à renvoyer * * @throws Throwable le throwable à lancer */ T réponse (InvocationOnMock invocation) throws Throwable; }
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 couverte par new. Répondre;
À l'aide de méthodes d'interception et de proxy, la définition et l'obtention des paramètres d'entrée et de sortie de la méthode d'objet fictif sont réalisées. Grâce à cette méthode, l'appel de classe d'exécution à l'intérieur de la méthode VOID peut être vérifié.