2010-12-29 24 views
22

Tôi đã googled cho trường hợp thử nghiệm JUnit, và nó đi kèm với cái gì đó trông rất phức tạp hơn để thực hiện - nơi bạn có để tạo ra một lớp mới mở rộng trường hợp thử nghiệm mà bạn sau đó gọi:Có JUnit tương đương với thuộc tính testcase của NUnit không?

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

nhưng những gì tôi muốn là một cái gì đó thực sự đơn giản, giống như các trường hợp thử nghiệm NUnit

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

Có cách nào để thực hiện điều này trong JUnit không?

+2

JUnit có hai phong cách: phiên bản 3, mà bạn có trong ví dụ của bạn, và phiên bản 4, trong đó sử dụng các chú thích. Bạn có thực sự muốn biết về phiên bản 3 không? – Raedwald

+0

Ah .. Không ... Tôi muốn biết về 4.5 ... – Steph

+1

Tôi nghĩ rằng những gì tôi có thể tìm kiếm là Kiểm tra tham số. Nhưng ngay cả điều này có vẻ hơi tiết và một chút ngẫu nhiên ... http://www.mkyong.com/unittest/junit-4-tutorial-6-parameterized-test/ – Steph

Trả lời

2

Thật ngớ ngẩn nhưng đây là cách giải quyết cuối cùng mà tôi có. Sử dụng 4 dòng thay vì một dòng.

@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

Cũng có thể đáng để kiểm tra JUnit Theories and Datapoints. Chúng cho phép bạn kiểm tra các thử nghiệm, nhưng chạy kết hợp kiểu tất cả các cặp trên đầu vào của bạn.

+0

Điều này giống như câu trả lời gần nhất với yêu cầu. –

10

Dường như câu trả lời đúng là "Không, không có tương đương." Và đó là buồn.

Các kiểm tra và lý thuyết được tham số hóa JUnit (như đã đề cập ở đây và trong JUnit - How to test a method with different values?) cả hai đều có thể hoàn thành công việc, nhưng không nơi nào gần như sạch sẽ. Chúng rất phức tạp để viết và khó đọc.

Tôi hy vọng rằng một ngày nào đó, JUnit có thể thêm cú pháp giống NUnit dễ dàng hơn. Có vẻ như không khó như vậy; mặc dù có lẽ lambdas là cần thiết?

+0

Lambdas có lẽ không cần thiết nhiều như generics thích hợp, nhưng đó chỉ là một đoán ở đây. Chú thích/Thuộc tính không phụ thuộc vào các chức năng ẩn danh. – Joey

11

2017 cập nhật: JUnit 5 sẽ bao gồm các thử nghiệm được tham số hóa thông qua phần mở rộng junit-jupiter-params. Một số ví dụ từ documentation:

tham số đơn các loại nguyên thủy (@ValueSource):

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

giá trị bằng dấu phẩy tách ra (@CsvSource) cho phép xác định nhiều thông số tương tự như JUnitParams dưới đây:

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

khác chú thích nguồn bao gồm @EnumSource, @MethodSource, @ArgumentsSource@CsvFileSource, xem documentation để biết chi tiết.


Original câu trả lời:

JUnitParams (https://github.com/Pragmatists/JUnitParams) có vẻ như là một lựa chọn tốt. Nó cho phép bạn xác định các thông số xét nghiệm như dây đàn, như thế này:

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

Bạn cũng có thể chỉ định các thông số thông qua các phương pháp riêng biệt, các lớp học hoặc các tập tin, tham khảo JUnitParamsRunner api docs để biết chi tiết.

5

Bạn có thể có junit với các thông số sử dụng zohhak

dụ Cách sử dụng:

@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

Điều này thậm chí còn đẹp hơn tính năng '@ ValueSource' mới của JUnit 5. – urig

Các vấn đề liên quan