Vorwort
Als wir Java lernten, schrieben Lehrer oder allgemeine Bücher, dass es acht Grundtypen von Java gibt. Dies sind: Byte, Int, Short, Long, Float, Double, Char, Boolean. Als ich heute Morgen jedoch die Java-Bibel „Thinking in Java“ las, stellte ich fest, dass der Autor bei der Erklärung der Datentypen auch nichtig war. Es gibt also neun Arten. Nach der Suche auf Baidu wurde in einigen Büchern auch festgestellt, dass Java neun Grundtypen hat.
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 haben keinen Rückgabewert. Der einzelne Test kann nicht auf der Grundlage des Rückgabewerts geschrieben werden die Methode. Es können nur spezielle Methoden verwendet werden.
Diese Methodenumgebung: Mockito, testng
Getestete Methode:
Die VOID-Methode, die Sie Java testen möchten
@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:
Die von void testes Java zurückgegebene 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 in den Kommentaren gezeigt, führen Sie Folgendes aus, wenn während des Ausführungsprozesses zwei Haltepunkte hinzugefügt werden Während der Ausführung von Endpunkt 1 wird der Stub von Endpunkt 2 ausgeführt. Zu diesem Zeitpunkt können die Eingabeparameter der Methodenausführung am Haltepunkt 2 abgerufen und die Eingabeparameter überprüft werden, um den Zweck zu erreichen.
new Anwer ist eine Schnittstelle mit nur einer Methode, die zum Festlegen des Proxy-Ausführungseintrags für Methodenaufrufe verwendet wird
doAnswer-Implementierung 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; }
Wenn der Code für „ruleDao.updateSelective(rule);“ ausgeführt wird, wird der für das Scheinobjekt aufgerufene Interceptor ausgelöst. Der Aufruf des dynamischen Proxys erfolgt im Interceptor in der neuen Antwort behandelt;
Verwenden Sie Abfang- und Proxy-Methoden, um die Einstellung und Erfassung von Eingabe- und Ausgabeparametern der Scheinobjektmethode zu realisieren.
Zusammenfassung
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels jedem beim Lernen oder Arbeiten helfen kann. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen zu kommunizieren.
Ausführlichere Erläuterungen zu Java-Einzeltest-Void-Typ-Methoden und verwandte Artikel finden Sie auf der chinesischen PHP-Website!