2014-01-14 2 views
0

매개 변수 순서에 관계없이 메서드의 유효성을 올바르게 확인하고 싶습니다. 따라서 Java : 다른 매개 변수 순서의 테스트 메서드

는 단편 3

(단편 1)

public Integer compute_speed(Integer distance, Integer time) { 
    return distance/time; 
} 

(단편 2)

public Integer compute_speed(Integer time, Integer distance) { 
    return distance/time; 
} 

의 테스트 케이스를 통과해야 모두 1, 2 니펫 두 코드 단편을 두 코드로 다른 코드로 간주 할 수 있습니다. nts. 그리고 당신은이 조각 1의 유효성을 확인

(조각 3)

return compute_speed(3, 1).equals(3); 

, 내가 쓴 큰, 테스트 케이스에서

(10)로 매개 변수의 수가 될 수 있다고 가정 할 수 있습니다 그러나 2를 위해 실패합니다. 두 스 니펫이 테스트 케이스를 통과하도록 만드는 방법은 무엇입니까?

만 있었다면 뭔가 사전에

return compute_speed(distance = 3, time = 1).equals(3); 

감사합니다 ... 난 당신이 경우 통과를 모두 검사를 수 있다고 생각하지 않습니다

+0

왜 지구에 당신은 같은 이름의 두 가지 방법을 원하는 것 :

@Test(dataProvider = "students") public void testMethod(Class<?> clazz) throws Exception { DistanceCalculator dc = (DistanceCalculator) clazz.newInstance(); assertEquals(dc.computeSpeed(3, 1), (Integer) 3, clazz.getSimpleName().replace("DistanceCalculator", "") + " failed"); } @DataProvider(name = "students") public Object[][] dataProvider() { return new Object[][]{ {AssyliasDistanceCalculator.class}, {BobDistanceCalculator.class}}; } 

그리고 당신이 테스트를 통과하지 않는 사람에 대한 자세한 보고서를 얻을 것이다 동일한 매개 변수를 사용하지만 순서가 다른가요? 그건 혼란 스럽네요. (http://ballinyourcourt.files.wordpress.com/2012/03/shoot-foot1.jpg). – assylias

+0

이것은 매개 변수의 순서가 다르므로 벌점을받지 않아야하는 학생의 숙제를 평가해야합니다! – Curious

+0

은'return compute_speed (3, 1) .equals (3)입니다. || compute_speed (1, 3) .equals (3);'당신의 필요에 충분합니까? 물론 매개 변수의 수가 증가함에 따라 다루기 힘들어집니다 ... –

답변

1

클리너 방법은 Integer computeSpeed(Integer time, Integer distance); 방법으로 인터페이스를 생성하는 것입니다 :

public interface DistanceCalculator { 
    Integer computeSpeed(Integer distance, Integer time); 
} 

당신은 다음을 구현하고 그 구현 StudentNameDistanceCalculator를 호출하는 학생들에게.예를 들어, 당신은 학생들로부터 다음과 같은 수업을 받게됩니다 :

public class AssyliasDistanceCalculator implements DistanceCalculator { 
    public Integer computeSpeed(Integer distance, Integer time) { 
     return distance/time; 
    } 
} 

public class BobDistanceCalculator implements DistanceCalculator { 
    public Integer computeSpeed(Integer distance, Integer time) { 
     return distance/time * 2; 
    } 
} 

그런 다음 하나 개의 프로젝트에서 모든 클래스를로드 한 번에 모든 클래스를 테스트 할 수 있습니다. TestNG의와 예를 들어 두 가지를 복용

enter image description here

1

같은. 일반적으로 a/bb/a과 같지 않습니다.

사실, 조각 1과 2가 같은 클래스에 있다고 가정하면 두 방법 모두 동일한 서명이 있기 때문에 컴파일되지 않습니다. 자바가 두 메소드가 똑같이 유효 할 때 호출 할 메소드를 어떻게 선택하겠습니까?

여기에 둘 이상의 방법이있는 이유가 없습니다. 그것은 속도를 계산하는 데 필요한 모든 것입니다. 질문으로

speed := compute_speed(distance => 3, time => 1); 

UPDATE

을 다른 학생들로부터 다른 클래스 테스트에 업데이트되는 :

자바는 말, PL/SQL이있다,라는 이름의 매개 변수 표기법의 기능을 가지고 있지 않습니다 다음과 같은 테스트 케이스가 있습니다.

assertTrue(compute_speed(3, 1).equals(3) || compute_speed(1, 3).equals(3)); 

두 매개 변수 순서가 모두 적용됩니다.

+0

나는 질문을 업데이트했는데 그것들은 같은 클래스는 아니지만, 우리는 이것들이 서로 다른 매개 변수 순서를 가짐으로써 형벌받지 않아야하는 다른 학생들에 의한 두 가지 제출이라고 가정 할 수 있습니다! – Curious

+0

다른 순서를 검증하는 순열을 갖는 것은 위험합니다, 즉 '속도/시간'을 '시간/거리'로 정의하는 학생은 테스트. :) – Curious

관련 문제