무효 키워드
이 섹션에서는 void 메서드를 선언하고 호출하는 방법을 설명합니다.
다음 예제에서는 printGrade라는 메서드를 선언하고 이를 호출하여 지정된 성적을 인쇄합니다.
예
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 (점수 >= 80.0) { System.out.println('B') } else if (점수 >= 70.0) { System.out.println('C') } else if (점수 >= 60.0) { System.out.println('D') } else { System.out.println('F'); }}
위 예제의 컴파일 및 실행 결과는 다음과 같습니다.
기음
여기서 printGrade 메소드는 void 유형 메소드이며 값을 반환하지 않습니다.
void 메소드에 대한 호출은 명령문이어야 합니다. 따라서 메인 메소드의 세 번째 줄에 있는 문장이라고 부릅니다. 세미콜론으로 끝나는 모든 명령문과 같습니다.
보이드 유형을 테스트하는 단일 방법
Java의 서비스 계층에는 save* 및 update*와 같은 많은 void 유형 메소드가 있습니다. 이러한 메소드는 일부 업데이트만 수행하며 메소드의 리턴 값을 기반으로 단일 테스트를 작성할 수 없습니다. 특별한 방법만 사용하세요.
이 방법을 위한 환경: Mockito, testng
테스트된 방법:
테스트하려는 VOID 메소드
@Override public void updateRuleName(Long ruleId, String newRuleName, Long ucId) { Assert.notNull(ruleId, "규칙 ID는 Null일 수 없습니다.") Assert.notNull(newRuleName, "규칙 이름은 Null일 수 없습니다."); notNull( ucId, "운영자의 UCID는 Null일 수 없습니다.") String cleanNewRuleName = StringUtils.trim(newRuleName); if (StringUtils.isBlank(cleanNewRuleName)) { throw new IllegalArgumentException("새 규칙 이름은 비워둘 수 없습니다.") } // 쿼리 규칙 개체 Rule rule = queryRuleById(ruleId); = rule) { throw new IllegalDataException("규칙을 찾을 수 없습니다.") } rule.setRuleId(ruleId); rule.setRuleName(cleanNewRuleName); rule.setUpdateUcid(ucId); rule.setUpdateTime(new Date());
테스트 방법:
무효 반환 방법 테스트
@Test public void testUpdateRuleName() { Long ruleId = "newRuleName"; Long ucId = 123L; List<Rule> 규칙 = new ArrayList<Rule>(); ((바이트) DBValueSetting.RULE_STATUS_TAKE_EFFECT) rule.add(rule); 쿼리 규칙 객체 Map<String, Object> params = new HashMap<String, Object>(); params.put("ruleId", ruleId); Mockito.when(ruleDao.queryRulesByCondition(params)).thenReturn(rules); .doAnswer(new Answer<Object>() { public Object Answer(InvocationOnMock 호출) { // 중단점 2: 규칙 규칙 = (Rule) invocation.getArguments()[0]; Assert.assertTrue(rule.getRuleName().equals("newRuleName")).when(ruleDao ).updateSelective( Mockito.any(Rule.class)); // 중단점 1: 여기서 먼저 실행 ruleService.updateRuleName(ruleId, 새로운규칙이름, ucId) }
주석에서 볼 수 있듯이 두 개의 중단점을 추가하면 실행 중에 마지막 호출 라인이 먼저 실행됩니다. 엔드포인트 2의 스텁은 이때 중단점 2에서 얻을 수 있습니다. . 메소드 실행의 입력 매개변수로 이동하여 목적을 달성하기 위해 입력 매개변수에 대해 Assert 검증을 수행합니다.
new Anwer는 메서드 호출에 대한 프록시 실행 항목을 설정하는 데 사용되는 메서드가 하나만 있는 인터페이스입니다.
doAnswer 구현
public 인터페이스 Answer<T> { /** * @param 모의 호출에 대한 호출 * * @return 반환할 값 * * @throws Throwable 던질 수 있는 던지기 */ T Answer(InvocationOnMock invocation) Throwable; }
"ruleDao.updateSelective(rule);" 코드가 실행되면 mock 객체에 대해 호출되는 인터셉터가 실행됩니다. 인터셉터에서 동적 프록시의 호출은 new에서 다루는 방법입니다. 답변;
차단 및 프록시 메소드를 사용하여 모의 객체 메소드의 입력 및 출력 매개변수 설정 및 획득을 구현합니다. 이 메소드를 사용하면 VOID 메소드 내부의 실행 클래스 호출을 확인할 수 있습니다.