void-Schlüsselwort
In diesem Abschnitt wird erläutert, wie eine void-Methode deklariert und aufgerufen wird.
Das folgende Beispiel deklariert eine Methode namens printGrade und ruft sie auf, um die angegebene Punktzahl zu drucken.
Beispiel
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'); } } }
Die Kompilierungs- und Ausführungsergebnisse des obigen Beispiels lauten wie folgt:
C
Die printGrade-Methode Hier ist eine Methode vom Typ „void“, die keinen Wert zurückgibt.
Ein Aufruf einer void-Methode muss eine Anweisung sein. Daher wird es als Anweisung in der dritten Zeile der Hauptmethode aufgerufen. Genau wie jede Aussage, die mit einem Semikolon endet.
Einzelner Test von Methoden vom Typ „Void“
Die Serviceschicht von Java verfügt über viele Methoden vom Typ „Void“, z. B. „Save*“ und „Update*“. Diese Methoden führen nur einige Aktualisierungen durch und geben keinen Wert zurück. Tests können nicht geschrieben werden basierend auf dem Rückgabewert der Methode und kann nur spezielle Methoden verwenden;
Umgebung dieser Methode: Mockito, testng
Zu testende Methode:
Möchte sein getestete VOID-Methode
@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); }
Testmethode:
vom Test zurückgegebene void-Methode
@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); }
wie kommentiert As Wenn während des Ausführungsprozesses zwei Haltepunkte hinzugefügt werden, wird die letzte aufrufende Zeile zuerst ausgeführt. Während der Ausführung von Endpunkt 1 wird der Stub von Endpunkt 2 ausgeführt. Zu diesem Zeitpunkt kann die Methode am Haltepunkt 2 abgerufen werden . Führen Sie die Eingabeparameter aus und führen Sie eine Assert-Überprüfung für die Eingabeparameter durch.
Neue Antwort ist eine Schnittstelle mit nur einer Methode, die zum Festlegen des Agentenausführungseingangs für den Methodenaufruf verwendet wird
doAnswer Die Implementierung von
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; }
Wenn der Code für „ruleDao.updateSelective(rule);“ ausgeführt wird, wird der für das Scheinobjekt aufgerufene Interceptor ausgelöst Interceptor, es wird ein dynamischer Agent erstellt. Der Aufruf des dynamischen Agenten ist die in der neuen Antwort behandelte Methode.
verwendet Abfangen und Proxy, um die Einstellung und Erfassung der Eingabe- und Ausgabeparameter des Scheinobjekts zu realisieren Verwenden Sie diese Methode. Auf diese Weise können Sie den Aufruf der Ausführungsklasse innerhalb der VOID-Methode überprüfen.
Weitere Artikel zum Erlernen von Tutorials zu Void-Methoden in der Java-Programmierung finden Sie auf der chinesischen PHP-Website!