Maison  >  Article  >  Java  >  Tutoriel d'apprentissage sur la méthode void en programmation Java

Tutoriel d'apprentissage sur la méthode void en programmation Java

高洛峰
高洛峰original
2017-01-22 10:11:391812parcourir

mot-clé void
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 le score donné.
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 voici une méthode de type void, elle ne renvoie pas de valeur.
Un appel à une méthode void doit être une instruction. Par conséquent, il est appelé comme instruction sur la troisième ligne de la méthode principale. Comme toute instruction se terminant par un point-virgule.

Test unique des méthodes de type void
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. écrit en fonction de la valeur de retour de la méthode, et ne peut utiliser que des méthodes spéciales

Environnement de cette méthode : Mockito, testng

Méthode à tester :

Vous voulez être testé méthode VOID

@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 :

méthode void renvoyée par test

@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 commenté Comme indiqué, si deux points d'arrêt sont ajoutés, pendant le processus d'exécution, la dernière ligne appelante sera exécutée en premier. Lors de l'exécution du point de terminaison 1, le stub du point de terminaison 2 sera exécuté. À ce moment, la méthode peut être obtenue au point d'arrêt. 2. Exécutez les paramètres d'entrée et effectuez une vérification d'assertion sur les paramètres d'entrée pour atteindre l'objectif

la nouvelle Anwer est une interface avec une seule méthode, qui est utilisée pour définir l'entrée d'exécution de l'agent pour l'appel de méthode

doAnswer L'implémentation de

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;
}

Lorsque le code est exécuté sur "ruleDao.updateSelective(rule);", l'intercepteur appelé pour l'objet fictif sera déclenché dans. l'intercepteur, il sera créé Un agent dynamique, l'invocation de l'agent dynamique est la méthode couverte dans la nouvelle réponse

utilise l'interception et le proxy pour réaliser le réglage et l'acquisition des paramètres d'entrée et de sortie du mock ; méthode objet.Utilisez ceci De cette façon, vous pouvez vérifier l'appel de classe d'exécution à l'intérieur de la méthode VOID.

Pour plus d'articles liés aux didacticiels d'apprentissage sur les méthodes void en programmation Java, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn