2010-12-29 2 views
22

나는 JUnit 테스트 케이스에 대한 인터넷 검색했습니다, 그리고 더 복잡한 많은 구현 보이는 뭔가 온다 - 당신이 다음 전화 테스트 케이스를 확장하는 새 클래스를 만들 필요가 여기서NUnit의 testcase 속성과 동일한 JUnit이 있습니까?

public class MathTest extends TestCase { 
    protected double fValue1; 
    protected double fValue2; 

    protected void setUp() { 
     fValue1= 2.0; 
     fValue2= 3.0; 
    } 
} 

public void testAdd() { 
    double result= fValue1 + fValue2; 
    assertTrue(result == 5.0); 
} 

을 하지만 내가 원하는 것은 NUnit과 테스트 케이스

[TestCase(1,2)] 
[TestCase(3,4)] 
public void testAdd(int fValue1, int fValue2) 
{ 
    double result= fValue1 + fValue2; 
    assertIsTrue(result == 5.0); 
} 

의 JUnit에서이 작업을 수행 할 수있는 방법이 있나요처럼 정말 간단한 일이있다?

+2

의 JUnit은 두 가지 스타일이있다. 버전 3에 대해 정말로 알고 싶습니까? – Raedwald

+0

아 .. 아니오 ... 4.5에 대해 알고 싶습니다 ... – Steph

+1

내가 찾고있는 것이 매개 변수화 된 테스트라고 생각합니다. 그러나 이것조차 조금 장황하고 약간 무작위로 보입니다 ... http://www.mkyong.com/unittest/junit-4-tutorial-6-parameterized-test/ – Steph

답변

2

그것은 바보 같지만 여기에 제가 가지고있는 해결 방법이 있습니다. 한 줄 대신 네 줄을 사용하십시오.

@Test 
public void testAdd1() { 
    testAdd(1,2); 
} 
@Test 
public void testAdd2() { 
    testAdd(3,4); 
} 
private void testAdd(int fValue1, int fValue2) 
{ 
    double result= fValue1 + fValue2; 
    assertIsTrue(result == 5.0); 
} 
6

또한 JUnit Theories and Datapoints 체크 아웃 가치가있을 수 있습니다. 테스트를 매개 변수화 할 수 있지만 입력에 모두 쌍 유형 조합을 실행합니다.

+0

이것은 가장 가까운 요구 사항과 같습니다. –

10

정답은 "아니요, 이에 상응하는 것이 없습니다"입니다. 슬프다.

JUnit 매개 변수화 된 테스트 및 이론 (여기에 언급 된 바와 JUnit - How to test a method with different values?)은 둘 다 작업을 완료 할 수 있지만 어디에도 거의 깔끔하게 없습니다. 그들은 슬프게도 쓰고 읽기가 어렵습니다.

언젠가 JUnit이 NUnit과 같은 구문을 쉽게 추가 할 수 있기를 바랍니다. 그것이 그렇게 어려운 일이 아니어야하는 것처럼 보입니다. 아마 람다가 필요 하겠지?

+0

람다 (Lambdas)는 아마도 적절한 제네릭만큼이나 필요하지 않을 수 있습니다. 주석/속성은 익명의 함수에 전혀 의존하지 않습니다. – Joey

11

2017 업데이트 : JUnit 5에는 junit-jupiter-params 확장을 통한 매개 변수화 된 테스트가 포함됩니다. documentation에서 일부 예 : 기본형

단일 매개 변수 (@ValueSource)

@ParameterizedTest 
@ValueSource(strings = { "Hello", "World" }) 
void testWithStringParameter(String argument) { 
    assertNotNull(argument); 
} 

쉼표로 구분 된 값 (@CsvSource) 아래 JUnitParams 유사한 다수의 매개 변수를 지정 허용 :

@ParameterizedTest 
@CsvSource({ "foo, 1", "bar, 2", "'baz, qux', 3" }) 
void testWithCsvSource(String first, int second) { 
    assertNotNull(first); 
    assertNotEquals(0, second); 
} 

기타 소스 주석에는 @EnumSource, @MethodSource, @ArgumentsSource@CsvFileSource이 포함됩니다 (참조). 자세한 내용은을 참조하십시오.


원래 답 :

JUnitParams (https://github.com/Pragmatists/JUnitParams는) 괜찮은 대안처럼 보인다. 그것은 당신이 다음과 같이 문자열로 테스트 매개 변수를 지정할 수 있습니다 : 또한, 별도의 방법, 클래스 또는 파일을 통해 매개 변수를 지정 자세한 내용은 JUnitParamsRunner api docs을 참조 할 수

@RunWith(JUnitParamsRunner.class) 
public class MyTestSuite { 
    @Test 
    @Parameters({"1,2", "3,4"}) 
    public testAdd(int fValue1, int fValue2) { 
     ... 
    } 
} 

.

5

당신은 zohhak

사용 예제를 사용하여 매개 변수의 JUnit을 가질 수 있습니다 : 당신이 당신의 예에서이 버전 3, 및 주석을 사용하는 버전 4 :

@RunWith(ZohhakRunner.class) 
public class HelloWorldTest { 

    @TestWith({ 
     "2, 1, 3", 
     "3, 5, 8" 
    }) 
    public void should_add_numbers(int addend1, int addend2, int result) { 

     assertThat(addend1 + addend2).isEqualTo(result); 
    } 
} 
+0

이것은 JUnit 5의 새 @ValueSource 기능보다 훨씬 좋습니다. – urig

관련 문제