2012-01-31 6 views
2

공용 메서드 중 하나가 매개 변수화 된 테스트에 가장 적합한 클래스가 있습니다. 또한 일반적으로 테스트 케이스 (@Test 주석이 달린 메소드가있는 여러 메소드가있는 클래스)와 프로젝트의 클래스 사이의 통신을 유지한다고 읽습니다. 어떻게 든 Parameterized.class와 JUnitCore.class를 러너로 사용할 수 있습니까? Parameterized를 활용한다면, 동일한 테스트 케이스 내에서 파라미터 화되지 않은 테스트 방법을 구현하는 방법을 찾을 수 없습니다. . 나는 그때에 매개 변수화 된 테스트와 "일반"테스트를 포함 할 스위트를 작성하려고했지만 테스트 케이스의 이름을 테스트 케이스의 이름에 의미있게 만드는 것처럼 보였다. 오히려 표준 방법 인 것처럼 보이는 방법을 포함하는 클래스로 넘어갑니다. 예를 들어JUnit에서 매개 변수화 된 테스트 사용

public class MyClass { 

    public int methodSuitableForParameterizedTest(int m){ 
     // Implementation 
    } 

    public int methodForRegularTest(int m) { 
     // Implmentation 
    } 
} 

난 아직도 paremeterized 첫 번째 방법의 테스트뿐만 아니라 두 번째의 비 매개 변수 테스트를 포함하는 하나의 테스트 케이스 TestMyclass을 할 수 있습니까?

+0

가 있다는 사실을 숙지하고, 테스트 스위트에서 호출되는 것은 아니다 : 그것은 당신이 작성할 수 있습니다 수업. 리플렉션을 사용하면 단위 테스트 클래스가 정적 수집 메서드를 사용하여 자체 생성자를 호출하여 테스트 사례를 작성할 수 있습니다. – djangofan

답변

2

이것은 매우 어렵습니다. 두 가지 작업을 모두 수행하는 고유 한 러너를 만드는 것이므로 매개 변수가있는 테스트와없는 테스트의 두 클래스 솔루션을 고수 할 것입니다.

문제는 두 가지로, 클래스 및 컨스트럭터의 @RunWith 주석입니다. 매개 변수화 된 테스트의 경우 @RunWith(Parameterized.class) 및 인수가있는 생성자가 필요합니다. 표준 테스트의 경우 생성자에는 매개 변수가 없습니다. 그리고 JUnit은 특정 클래스가 하나의 생성자 만 가지고 있는지 확인합니다. 다른 주자를 만들면이 작업을 수행 할 수 있지만 간단하지는 않습니다.

이 경우 두 개의 테스트 클래스가있는 것이 좋습니다.

+0

추천 해 주셔서 감사합니다. 클래스 구조 당 하나의 테스트 케이스를 유지할 수 없다는 것을 짜증나게합니다. –

+1

TestNG의 데이터 공급자를 사용하는 것이 중요합니다. 원하는대로 클래스에 매개 변수화 된 테스트 메서드 및 데이터 공급자를 많이 포함 할 수 있지만이 매개 변수를 테스트 메서드에 직접 전달할 수도 있습니다. http://testng.org –

+0

감사합니다. 세드릭. 이것은 JUnit에서 앞으로 나아갈 때라고 확신하기 전에 TestNG에서 마지막으로 고개를 끄덕 였을 수도 있습니다. –

1

최근에 나는 zohhak 프로젝트를 시작했습니다. 생성자와 배열 방법 또한 컬렉션/목록 모두 모두 반사에 의해 호출, 매개 변수화 된 테스트를 사용하는 경우

@TestWith({ 
    "25 USD", 
    "38 GBP", 
    "null" 
}) 
public void testMethod(Money money) { 
    ... 
} 
+0

나는 zohhak을 좋아하지만, Spock을 사용하고 싶습니다. 훨씬 간단 해. –

관련 문제