2012-01-05 44 views
83

Tôi có một lớp java thực hiện tổng số nhị phân, tôi vẫn đang cố gắng tìm ra cách làm các bài kiểm tra đơn vị nhưng tôi không biết cách thực hiện nó. Tôi đã googled xung quanh và lời giải thích tốt nhất tôi đã là trang từ Wikipedia: http://en.wikipedia.org/wiki/Unit_testingLàm thế nào để viết một bài kiểm tra đơn vị?

nhưng tôi vẫn không chắc chắn làm thế nào để làm bài kiểm tra của tôi cho chương trình này. Về cơ bản, chương trình thực hiện lấy 2 byte [] và thêm chúng và trả về mảng nhị phân mới. Được viết bằng Java. Làm thế nào tôi có thể kiểm tra nó?

+4

Bạn có thể sử dụng công cụ như [jUnit] (http://www.junit.org/) và viết các trường hợp kiểm tra (phương pháp thử) cho lớp java của bạn. Sau đó, gọi các bài kiểm tra jUnit như là một phần của quá trình xây dựng (ant/maven). Sử dụng jUnit không khó chút nào, phần khó khăn sẽ xuất hiện với nhiều kịch bản thử nghiệm mà bạn có thể nghĩ đến để bạn bắt được các lỗi sớm và thường xuyên. – CoolBeans

Trả lời

94
  1. Xác định đầu ra mong muốn và mong muốn cho trường hợp thông thường, với đầu vào chính xác.

  2. Bây giờ, thực hiện các bài kiểm tra bằng cách tuyên bố một lớp, đặt tên cho nó bất cứ điều gì (Thông thường cái gì đó như TestAddingModule), và thêm các phương pháp testAdd đến nó (ví dụ như hình dưới đây):

    • Viết một phương pháp, và ở trên nó thêm chú thích @Test.
    • Trong phương pháp, chạy tổng số nhị phân của bạn và assertEquals(expectedVal,calculatedVal).
    • Kiểm tra phương pháp của bạn bằng cách chạy nó (trong Eclipse, nhấp chuột phải, chọn Run as → JUnit test).

      //for normal addition 
      @Test 
      public void testAdd1Plus1() 
      { 
          int x = 1 ; int y = 1; 
          assertEquals(2, myClass.add(x,y)); 
      } 
      
  3. Thêm trường hợp khác theo mong muốn.

    • Kiểm tra tổng số nhị phân của bạn không ném ngoại lệ không mong muốn nếu có tràn số nguyên.
    • Kiểm tra xem phương thức của bạn có xử lý các đầu vào Null một cách duyên dáng hay không (ví dụ bên dưới).

      //if you are using 0 as default for null, make sure your class works in that case. 
      @Test 
      public void testAdd1Plus1() 
      { 
          int y = 1; 
          assertEquals(0, myClass.add(null,y)); 
      } 
      
+0

1. là ký hiệu @Test cần thiết? 2. tại sao không thử nghiệm cho đầu vào null với assertNotNull? 3. Các kết quả của các bài kiểm tra đơn vị được chụp ở đâu? các kết quả được chỉ ra cho người dùng như thế nào? – user137717

+7

Có, ký hiệu '@ Test' là bắt buộc. Điều này được thực hiện để báo hiệu cho bộ kiểm thử đơn vị rằng phương thức này thể hiện một phép thử đơn vị và sẽ được thực thi. Các phương thức không được chú thích bằng '@ Test' không được thực hiện bởi người thử nghiệm. –

12

Đây là một câu hỏi rất chung chung và có rất nhiều cách khác nhau nó có thể được trả lời.

Nếu bạn muốn sử dụng JUnit để tạo các bài kiểm tra, bạn cần tạo lớp testcase, sau đó tạo các phương thức thử nghiệm riêng lẻ để kiểm tra chức năng cụ thể của lớp/mô-đun của bạn trong các bài kiểm tra (các lớp testcase đơn thường được kết hợp với một bài kiểm tra " sản xuất "lớp đang được thử nghiệm) và bên trong các phương pháp này thực hiện các hoạt động khác nhau và so sánh kết quả với những gì sẽ là chính xác. Nó đặc biệt quan trọng để thử và bao gồm nhiều trường hợp góc nhất có thể.

Trong ví dụ cụ thể của bạn, bạn có thể ví dụ như kiểm tra như sau:

  1. Một bổ sung đơn giản giữa hai số dương. Thêm chúng, sau đó xác minh kết quả là những gì bạn mong đợi.
  2. Ngoài ra giữa số dương và số âm (trả về kết quả có dấu của đối số đầu tiên).
  3. Một bổ sung giữa số dương và số âm (trả về kết quả có dấu của đối số thứ hai).
  4. Một sự bổ sung giữa hai số âm.
  5. Ngoài ra dẫn đến tràn.

Để xác minh kết quả, bạn có thể sử dụng nhiều phương thức assX khác nhau từ lớp org.junit.Assert (để thuận tiện, bạn có thể 'nhập static org.junit.Assert. *'). Những phương pháp này kiểm tra một điều kiện cụ thể và không kiểm tra nếu nó không xác nhận (với một thông điệp cụ thể, tùy chọn).

Ví dụ lớp testcase trong trường hợp của bạn (không có nội dung phương pháp xác định):

import static org.junit.Assert.*; 

public class AdditionTests { 
    @Test 
    public void testSimpleAddition() { ... } 


    @Test 
    public void testPositiveNegativeAddition() { ... } 


    @Test 
    public void testNegativePositiveAddition() { ... } 


    @Test 
    public void testNegativeAddition() { ... } 


    @Test 
    public void testOverflow() { ... } 
} 

Nếu bạn không được sử dụng để viết bài kiểm tra đơn vị nhưng thay vì kiểm tra mã của bạn bằng cách viết tests ad-hoc mà bạn sau đó xác nhận " trực quan "(ví dụ, bạn viết một phương thức chính đơn giản chấp nhận các đối số được nhập bằng bàn phím và sau đó in ra các kết quả - và sau đó bạn tiếp tục nhập các giá trị và xác nhận chính xác nếu kết quả là chính xác), sau đó bạn có thể bắt đầu bằng cách viết các kiểm tra như vậy ở định dạng trên và xác thực kết quả bằng phương thức xác thựcXXX chính xác thay vì thực hiện thủ công. Bằng cách này, bạn có thể chạy lại bài kiểm tra dễ dàng hơn nhiều sau đó nếu bạn phải làm các bài kiểm tra thủ công.

6

Giống như @CoolBeans được đề cập, hãy xem jUnit. Dưới đây là một số tutorial ngắn để giúp bạn bắt đầu với jUnit 4.x

Cuối cùng, nếu bạn thực sự muốn tìm hiểu thêm về thử nghiệm và phát triển theo hướng kiểm tra (TDD), tôi khuyên bạn nên xem cuốn sách sau đây Kent Beck: Test-Driven Development By Example.

42

Đối với việc kiểm tra đơn vị cho dự án của bạn, hãy làm theo các bước sau (Tôi đang sử dụng Eclipse để viết bài kiểm tra này):

1- Bấm vào New -> Java Project.

Create Project

2- Viết tên dự án của bạn và nhấp vào kết thúc.

Create Project

3- Viết nhấp chuột vào dự án của bạn. Sau đó, nhấp vào New -> Class.

Create Class

4- Viết tên lớp học của bạn và nhấp vào kết thúc.

Create Class

Sau đó, hãy hoàn thành lớp như thế này:

public class Math { 
    int a, b; 
    Math(int a, int b) { 
     this.a = a; 
     this.b = b; 
    } 
    public int add() { 
     return a + b; 
    } 
} 

5- Bấm vào File -> New -> JUnit Test Case.

Create JUnite Test

6- Kiểm tra thiết lập() và click vào kết thúc. SetUp() sẽ là nơi bạn khởi tạo thử nghiệm của mình.

Check SetUp()

7- Nhấp vào OK.

Add JUnit

8- Ở đây, tôi chỉ cần thêm 7 và 10. Vì vậy, tôi hy vọng câu trả lời là 17.Hoàn tất lớp học thử nghiệm của bạn như sau:

import org.junit.Assert; 
import org.junit.Before; 
import org.junit.Test; 
public class MathTest { 
    Math math; 
    @Before 
    public void setUp() throws Exception { 
     math = new Math(7, 10); 
    } 
    @Test 
    public void testAdd() { 
     Assert.assertEquals(17, math.add()); 
    } 
} 

9- Viết nhấp chuột vào lớp kiểm tra của bạn trong trình thám hiểm gói và nhấp vào Chạy dưới dạng -> Kiểm tra JUnit.

Run JUnit Test

10- Đây là kết quả của thử nghiệm.

Result of The Test

Tôi hy vọng điều đó sẽ hữu ích.

+0

Yêu câu trả lời của bạn, đó là "cách thực hiện" tốt nhất! – alisa

+0

Tôi rất vui vì câu trả lời của tôi rất hữu ích. Cảm ơn bình luận của bạn. – Mohammad

0
public class FirtJunit { 

    @BeforeClass 
    public static void startUp() { 
     System.out.println("BeforeClass"); 
    } 
    @AfterClass 
    public static void shutDown() { 
     System.out.println("AfterClass"); 
    } 
    @Before 
    public void setup() { 
     System.out.println("Before"); 
    } 
    @After 
    public void tearDown() { 
     System.out.println("After"); 
    } 
    @Test 
    public void mul() { 
     System.out.println("Test for mul"); 
    } 
    @Test 
    public void div() { 
     System.out.println("Test for div"); 
    } 




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