>  기사  >  Java  >  Java에서 void 유형을 단일 테스트하는 방법에 대한 자세한 설명

Java에서 void 유형을 단일 테스트하는 방법에 대한 자세한 설명

高洛峰
高洛峰원래의
2017-01-19 14:32:431542검색

서문

우리가 자바를 배울 때, 교사나 일반 서적에서는 자바의 기본 유형이 8가지라고 적었습니다. 그들은 byte, int, short, long, float, double, char, boolean입니다. 그런데 오늘 아침 자바 성경 "Thinking in Java"를 읽다가 저자가 데이터 유형을 설명할 때도 void를 넣었다는 것을 알게 되었습니다. 그래서 9가지 종류가 있습니다. Baidu에서 검색한 결과 일부 책에서는 Java에 9가지 기본 유형이 있다고 나와 있습니다.

Java의 서비스 계층에는 save* 및 update*와 같은 많은 void 유형 메서드가 있습니다. 이러한 메서드는 일부 업데이트만 수행하며 반환 값을 기반으로 단일 테스트를 작성할 수 없습니다.

이 메소드 환경: Mockito, testng

테스트된 메소드:

Java를 테스트하려는 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);
 }

테스트 방법:

void return method test 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);
}

주석에 나와 있듯이 두 개의 중단점이 추가되면 실행 과정에서 마지막 호출이 먼저 실행됩니다. OK, 엔드포인트 1이 실행되는 동안 엔드포인트 2의 스텁이 실행됩니다. 이때 메서드 실행의 입력 매개변수는 중단점 2에서 얻을 수 있으며 입력 매개변수는 목적을 달성하기 위해 검증될 수 있습니다.

new Anwer는 메서드 호출에 대한 프록시 실행 항목을 설정하는 데 사용되는 메서드가 하나만 있는 인터페이스입니다.

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

코드가 " ruleDao.updateSelective(rule); "로 실행되면 모의 객체에 대해 호출된 인터셉터가 트리거됩니다. 인터셉터에서 동적 프록시의 호출은 new Answer에서 다루는 방법입니다. 🎜>

차단 사용 프록시와 프록시의 두 가지 메소드는 모의 객체 메소드의 입력 및 출력 매개변수 설정 및 획득을 구현합니다. 이 메소드를 사용하면 VOID 메소드 내부의 실행 클래스 호출을 확인할 수 있습니다. 🎜> 요약

이상은 이 글의 전체 내용입니다. 모든 분들의 공부나 업무에 조금이나마 도움이 되었으면 좋겠습니다. 궁금한 점이 있으시면 메시지를 남겨주세요.

Java 단일 테스트 void 유형 메소드에 대한 자세한 설명은 PHP 중국어 웹사이트를 참고하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.