Tôi có một lớp Java. Làm thế nào tôi có thể đơn vị kiểm tra nó?
Trong trường hợp của tôi, tôi có lớp thực hiện một tổng nhị phân. Phải mất hai byte[]
mảng, tính tổng chúng và trả về một mảng nhị phân mới.
Tôi có một lớp Java. Làm thế nào tôi có thể đơn vị kiểm tra nó?
Trong trường hợp của tôi, tôi có lớp thực hiện một tổng nhị phân. Phải mất hai byte[]
mảng, tính tổng chúng và trả về một mảng nhị phân mới.
Câu trả lời:
Xác định đầu ra mong muốn và mong muốn cho một trường hợp bình thường, với đầu vào chính xác.
Bây giờ, hãy thực hiện kiểm tra bằng cách khai báo một lớp, đặt tên cho nó là bất cứ thứ gì (Thông thường là một cái gì đó như TestAddingModule) và thêm phương thức testAdd vào nó (ví dụ như cách bên dưới):
assertEquals(expectedVal,calculatedVal)
.Kiểm tra phương thức 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));
}
Thêm các trường hợp khác như mong muốn.
Kiểm tra xem phương thức của bạn xử lý các đầu vào Null một cách duyên dá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));
}
@Test
ký hiệu là bắt buộc. Điều này được thực hiện để báo hiệu cho người chạy thử nghiệm đơn vị rằng phương thức này đại diện cho thử nghiệm đơn vị và nên được thực hiện. Các phương thức không được chú thích @Test
sẽ không được người chạy thử thực hiện.
null
để y
chỉ cung cấp cho bạn y
?
static
vào công cụ sửa đổi phương thức thử nghiệm.
Tôi cung cấp bài đăng này cho cả IntelliJ và Eclipse .
Nhật thực:
Để thực hiện kiểm tra đơn vị cho dự án của bạn, vui lòng làm theo các bước sau (Tôi đang sử dụng Eclipse để viết thử nghiệm này):
1- Nhấp vào Mới -> Dự án Java.
2- Viết tên dự án của bạn và bấm vào kết thúc.
3- Nhấp chuột phải vào dự án của bạn. Sau đó, nhấp vào Mới -> Lớp.
4- Viết tên lớp của bạn và bấm vào kết thúc.
Sau đó, hoàn thành lớp học 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- Nhấp vào Tệp -> Mới -> Trường hợp kiểm tra JUnit.
6- Kiểm tra setUp () và nhấp vào kết thúc. SetUp () sẽ là nơi bạn khởi tạo bài kiểm tra của mình.
7- Nhấp vào OK.
8- Ở đây, tôi chỉ cần thêm 7 và 10. Vì vậy, tôi mong đợi câu trả lời là 17. Hoàn thành lớp kiểm tra của bạn như thế này:
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 vào lớp kiểm tra của bạn trong gói thám hiểm và nhấp vào Chạy dưới dạng -> JUnit Test.
10- Đây là kết quả của bài kiểm tra.
IntelliJ: Lưu ý rằng tôi đã sử dụng cộng đồng IntelliJ IDEA 2020.1 cho các ảnh chụp màn hình. Ngoài ra, bạn cần thiết lập jre của bạn trước các bước này. Tôi đang sử dụng JDK 11.0.4.
1- Nhấp chuột phải vào thư mục chính của dự án của bạn-> mới ->. Bạn nên gọi đây là 'thử nghiệm'. 2- Nhấp chuột phải vào thư mục kiểm tra và tạo gói phù hợp. Tôi đề nghị tạo các tên đóng gói giống như lớp ban đầu. Sau đó, bạn nhấp chuột phải vào thư mục kiểm tra -> đánh dấu thư mục là -> kiểm tra nguồn gốc. 3- Trong gói bên phải trong thư mục thử nghiệm, bạn cần tạo một lớp Java (tôi đề nghị sử dụng Test.java). 4- Trong lớp đã tạo, nhập '@Test'. Sau đó, trong số các tùy chọn mà IntelliJ cung cấp cho bạn, hãy chọn Thêm 'JUnitx' vào đường dẫn lớp. 5- Viết phương pháp kiểm tra của bạn trong lớp kiểm tra của bạn. Chữ ký phương thức giống như:
@Test
public void test<name of original method>(){
...
}
Bạn có thể thực hiện các xác nhận của mình như dưới đây:
Assertions.assertTrue(f.flipEquiv(node1_1, node2_1));
Đây là những hàng nhập khẩu mà tôi đã thêm:
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
Đây là bài kiểm tra mà tôi đã viết:
Bạn có thể kiểm tra các phương pháp của bạn như dưới đây:
Assertions.assertEquals(<Expected>,<actual>);
Assertions.assertTrue(<actual>);
...
Để chạy thử nghiệm đơn vị của bạn, nhấp chuột phải vào thử nghiệm và nhấp vào Chạy.
Nếu bài kiểm tra của bạn vượt qua, kết quả sẽ như dưới đây:
Tôi hy vọng nó sẽ giúp. Bạn có thể thấy cấu trúc của dự án trong GitHub https://github.com/m-vahidalizadeh/probols_solve_project .
Đây là một câu hỏi rất chung chung và có rất nhiều cách 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 của mình, sau đó tạo các phương thức kiểm tra riêng để 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 liên kết với một lớp "sản xuất" duy nhất đang được thử nghiệm) và bên trong các phương thức 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ẽ chính xác. Điều đặc biệt quan trọng là phải cố gắng và bao gồm càng nhiều trường hợp góc càng tốt.
Trong ví dụ cụ thể của bạn, ví dụ bạn có thể kiểm tra các mục sau:
Để xác minh kết quả, bạn có thể sử dụng các phương thức assertXXX khác nhau từ lớp org.junit.Assert (để thuận tiện, bạn có thể thực hiện 'nhập tĩnh org.junit.Assert. *'). Các 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 thực (với một thông báo 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 thức được 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 quen viết bài kiểm tra đơn vị mà thay vào đó hãy kiểm tra mã của mình bằng cách viết bài kiểm tra đặc biệt mà sau đó bạn xác thực "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 kết quả - và sau đó bạn tiếp tục nhập các giá trị và tự xác thự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 thử nghiệm như vậy ở định dạng trên và xác thực kết quả bằng phương pháp assertXXX 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 sau đó nếu bạn phải làm bài kiểm tra thủ công.
Giống như @CoolBeans đã đề cập, hãy xem jUnit . Đây là một hướng dẫn ngắn để giúp bạn bắt đầu cũng như 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 dựa trên thử nghiệm (TDD), tôi khuyên bạn nên xem cuốn sách sau của Kent Beck: Phát triển dựa trên thử nghiệm theo ví dụ .
Các câu trả lời khác đã chỉ cho bạn cách sử dụng JUnit để thiết lập các lớp kiểm tra. JUnit không phải là khung thử nghiệm Java duy nhất. Tập trung vào các chi tiết kỹ thuật của việc sử dụng một khung tuy nhiên làm mất đi các khái niệm quan trọng nhất sẽ hướng dẫn hành động của bạn, vì vậy tôi sẽ nói về những điều đó.
Kiểm tra (tất cả các loại của tất cả các loại) so sánh hành vi thực tế của một cái gì đó (Hệ thống đang thử nghiệm, SUT) với hành vi dự kiến của nó .
Kiểm tra tự động có thể được thực hiện bằng một chương trình máy tính. Bởi vì sự so sánh đó đang được thực hiện bởi một chương trình máy tính không linh hoạt và không thông minh, nên hành vi dự kiến phải được biết chính xác và rõ ràng.
Những gì một chương trình hoặc một phần của một chương trình (một lớp hoặc phương thức) dự kiến sẽ làm là đặc điểm kỹ thuật của nó . Do đó, phần mềm kiểm tra yêu cầu bạn phải có thông số kỹ thuật cho SUT. Đây có thể là một mô tả rõ ràng hoặc một đặc điểm kỹ thuật ngầm trong đầu của bạn về những gì được mong đợi.
Do đó, kiểm thử đơn vị tự động đòi hỏi một đặc tả chính xác và rõ ràng của lớp hoặc phương thức bạn đang kiểm tra.
Nhưng bạn cần đặc tả đó khi bạn bắt đầu viết mã đó. Vì vậy, một phần của những gì kiểm tra thực sự bắt đầu trước khi bạn viết ngay cả một dòng của SUT. Kỹ thuật thử nghiệm của Phát triển hướng thử nghiệm (TDD) đưa ý tưởng đó đến mức cực đoan và bạn đã tạo mã thử nghiệm đơn vị trước khi bạn viết mã cần thử nghiệm.
Các khung kiểm tra đơn vị kiểm tra SUT của bạn bằng các xác nhận . Khẳng định là một biểu thức logic (một biểu thức có boolean
loại kết quả; một vị ngữ ) phải là true
nếu SUT hoạt động chính xác. Do đó, đặc điểm kỹ thuật phải được thể hiện (hoặc thể hiện lại) như các xác nhận.
Một kỹ thuật hữu ích để thể hiện một đặc tả như các xác nhận là lập trình bằng hợp đồng . Các thông số kỹ thuật là về mặt hậu điều kiện . Một postcondition là một khẳng định về trạng thái hiển thị công khai của SUT sau khi trả về từ một phương thức hoặc một hàm tạo. Một số phương thức có hậu điều kiện là bất biến , là các vị từ đúng trước và sau khi thực hiện phương thức. Một lớp cũng có thể được gọi là có bất biến, đó là các điều kiện hậu của mọi hàm tạo và phương thức của lớp, và do đó phải luôn luôn đúng. Postconditions (Và bất biến) chỉ được thể hiện dưới dạng trạng thái hiển thị công khai: public
và protected
các trường, các giá trị được trả về bởi trả vềpublic
và protected
các phương thức (chẳng hạn như getters) và trạng thái hiển thị công khai của các đối tượng được truyền (bằng tham chiếu) cho các phương thức.
Nhiều người mới bắt đầu đăng câu hỏi ở đây hỏi làm thế nào họ có thể kiểm tra một số mã, trình bày mã nhưng không nêu rõ đặc tả cho mã đó. Như cuộc thảo luận này cho thấy, không ai có thể đưa ra một câu trả lời hay cho câu hỏi như vậy, bởi vì ở những người trả lời tiềm năng tốt nhất phải đoán đặc tả và có thể làm sai. Người hỏi của câu hỏi rõ ràng không hiểu tầm quan trọng của một đặc điểm kỹ thuật, và do đó, một người mới cần hiểu các nguyên tắc cơ bản mà tôi đã mô tả ở đây trước khi thử viết một số mã kiểm tra.