Khung thử nghiệm Espresso - Tổng quan về JUnit
Trong chương này, chúng ta hãy hiểu những điều cơ bản về JUnit , khuôn khổ kiểm thử đơn vị phổ biến được phát triển bởi cộng đồng Java mà trên đó, khung thử nghiệm espresso được xây dựng.
JUnit là tiêu chuẩn thực tế để kiểm tra đơn vị ứng dụng Java. Mặc dù, nó phổ biến cho thử nghiệm đơn vị, nó cũng hỗ trợ và cung cấp đầy đủ cho thử nghiệm thiết bị đo. Thư viện thử nghiệm Espresso mở rộng các lớp JUnit cần thiết để hỗ trợ thử nghiệm thiết bị dựa trên Android.
Viết một bài kiểm tra đơn vị đơn giản
Chúng ta hãy tạo một lớp Java, Computation (Computation.java) và viết phép toán đơn giản, Phép tính tổng và phép nhân . Sau đó, chúng tôi sẽ viết các trường hợp thử nghiệm bằng JUnit và kiểm tra nó bằng cách chạy các trường hợp thử nghiệm.
Khởi động Android Studio.
Mở HelloWorldApp đã tạo trong chương trước.
Tạo một tệp, Computation.java trong ứng dụng / src / main / java / com / tutorialspoint / espressosa samples / helloworldapp / và viết hai hàm - Sum và Multiply như được chỉ định bên dưới,
package com.tutorialspoint.espressosamples.helloworldapp;
public class Computation {
public Computation() {}
public int Sum(int a, int b) {
return a + b;
}
public int Multiply(int a, int b) {
return a * b;
}
}
Tạo một tệp, ComputationUnitTest.java trong ứng dụng / src / test / java / com / tutorialspoint / espressosa samples / helloworldapp và viết các trường hợp thử nghiệm đơn vị để kiểm tra chức năng Sum và Multiply như được chỉ định bên dưới
package com.tutorialspoint.espressosamples.helloworldapp;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class ComputationUnitTest {
@Test
public void sum_isCorrect() {
Computation computation = new Computation();
assertEquals(4, computation.Sum(2,2));
}
@Test
public void multiply_isCorrect() {
Computation computation = new Computation();
assertEquals(4, computation.Multiply(2,2));
}
}
Ở đây, chúng tôi đã sử dụng hai thuật ngữ mới - @Test và khẳng địnhEquals . Nói chung, JUnit sử dụng chú thích Java để xác định các trường hợp thử nghiệm trong một lớp và thông tin về cách thực thi các trường hợp thử nghiệm. @Test là một trong những chú thích Java như vậy, chỉ định rằng hàm cụ thể là một trường hợp thử nghiệm junit. khẳng địnhEquals là một hàm để khẳng định rằng đối số đầu tiên (giá trị mong đợi) và đối số thứ hai (giá trị được tính toán) là bằng nhau và giống nhau. JUnit cung cấp một số phương pháp xác nhận cho các tình huống thử nghiệm khác nhau.
Bây giờ, hãy chạy ComputationUnitTest trong Android studio bằng cách nhấp chuột phải vào lớp và gọi tùy chọn Run 'ComputationUnitTest' như đã giải thích trong chương trước. Điều này sẽ chạy các trường hợp thử nghiệm đơn vị và báo cáo thành công.
Kết quả kiểm tra đơn vị tính toán như hình dưới đây:
Chú thích
Khung công tác JUnit sử dụng chú thích rộng rãi . Một số chú thích quan trọng như sau:
@Test
@Before
@After
@BeforeClass
@AfterClass
@Rule
Chú thích @Test
@Test là chú thích rất quan trọng trong khuôn khổ JUnit . @Test được sử dụng để phân biệt một phương pháp bình thường với phương pháp trường hợp thử nghiệm. Sau khi một phương thức được trang trí bằng chú thích @Test , thì phương thức cụ thể đó được coi là một Test case và sẽ được chạy bởi JUnit Runner . JUnit Runner là một lớp đặc biệt, được sử dụng để tìm và chạy các trường hợp thử nghiệm JUnit có sẵn bên trong các lớp java. Hiện tại, chúng tôi đang sử dụng tùy chọn tích hợp của Android Studio để chạy các bài kiểm tra đơn vị (lần lượt chạy JUnit Runner ). Một mã mẫu như sau,
package com.tutorialspoint.espressosamples.helloworldapp;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class ComputationUnitTest {
@Test
public void multiply_isCorrect() {
Computation computation = new Computation();
assertEquals(4, computation.Multiply(2,2));
}
}
@Trước
@Before annotation được sử dụng để chỉ một phương thức, phương thức này cần được gọi trước khi chạy bất kỳ phương thức thử nghiệm nào có sẵn trong một lớp thử nghiệm cụ thể. Ví dụ trong mẫu của chúng tôi, các tính toán đối tượng có thể được tạo ra trong một phương pháp riêng biệt và chú thích với @Before để nó sẽ chạy trước cả sum_isCorrect và multiply_isCorrect trường hợp thử nghiệm. Mã hoàn chỉnh như sau,
package com.tutorialspoint.espressosamples.helloworldapp;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class ComputationUnitTest {
Computation computation = null;
@Before
public void CreateComputationObject() {
this.computation = new Computation();
}
@Test
public void sum_isCorrect() {
assertEquals(4, this.computation.Sum(2,2));
}
@Test
public void multiply_isCorrect() {
assertEquals(4, this.computation.Multiply(2,2));
}
}
@Sau
@After tương tự như @Before , nhưng phương thức được chú thích bằng @After sẽ được gọi hoặc thực thi sau khi chạy mỗi trường hợp thử nghiệm. Mã mẫu như sau,
package com.tutorialspoint.espressosamples.helloworldapp;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class ComputationUnitTest {
Computation computation = null;
@Before
public void CreateComputationObject() {
this.computation = new Computation();
}
@After
public void DestroyComputationObject() {
this.computation = null;
}
@Test
public void sum_isCorrect() {
assertEquals(4, this.computation.Sum(2,2));
}
@Test
public void multiply_isCorrect() {
assertEquals(4, this.computation.Multiply(2,2));
}
}
@BeforeClass
@BeforeClass tương tự như @Before , nhưng phương thức được chú thích với @BeforeClass sẽ chỉ được gọi hoặc thực thi một lần trước khi chạy tất cả các trường hợp thử nghiệm trong một lớp cụ thể. Nó hữu ích để tạo đối tượng sử dụng nhiều tài nguyên như đối tượng kết nối cơ sở dữ liệu. Điều này sẽ làm giảm thời gian thực hiện một tập hợp các trường hợp kiểm thử. Phương thức này cần phải tĩnh để hoạt động bình thường. Trong mẫu của chúng tôi, chúng tôi có thể tạo đối tượng tính toán một lần trước khi chạy tất cả các trường hợp thử nghiệm như được chỉ định bên dưới,
package com.tutorialspoint.espressosamples.helloworldapp;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class ComputationUnitTest {
private static Computation computation = null;
@BeforeClass
public static void CreateComputationObject() {
computation = new Computation();
}
@Test
public void sum_isCorrect() {
assertEquals(4, computation.Sum(2,2));
}
@Test
public void multiply_isCorrect() {
assertEquals(4, computation.Multiply(2,2));
}
}
@Sau giờ học
@AfterClass tương tự như @BeforeClass , nhưng phương thức được chú thích bằng @AfterClass sẽ chỉ được gọi hoặc thực thi một lần sau khi tất cả các trường hợp thử nghiệm trong một lớp cụ thể được chạy. Phương pháp này cũng cần phải tĩnh để hoạt động bình thường. Mã mẫu như sau:
package com.tutorialspoint.espressosamples.helloworldapp;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class ComputationUnitTest {
private static Computation computation = null;
@BeforeClass
public static void CreateComputationObject() {
computation = new Computation();
}
@AfterClass
public static void DestroyComputationObject() {
computation = null;
}
@Test
public void sum_isCorrect() {
assertEquals(4, computation.Sum(2,2));
}
@Test
public void multiply_isCorrect() {
assertEquals(4, computation.Multiply(2,2));
}
}
@Qui định
Chú thích @Rule là một trong những điểm nổi bật của JUnit . Nó được sử dụng để thêm hành vi vào các trường hợp thử nghiệm. Chúng tôi chỉ có thể chú thích các trường thuộc loại TestRule . Nó thực sự cung cấp tính năng thiết lập được cung cấp bởi @Before và @After chú thích nhưng trong một cách hiệu quả và tái sử dụng. Ví dụ: chúng tôi có thể cần một thư mục tạm thời để lưu trữ một số dữ liệu trong trường hợp thử nghiệm. Thông thường, chúng tôi cần tạo một thư mục tạm thời trước khi chạy trường hợp thử nghiệm (sử dụng chú thích @Before hoặc @BeforeClass) và hủy nó sau khi trường hợp thử nghiệm được chạy (sử dụng chú thích @After hoặc @AfterClass). Thay vào đó, chúng ta có thể sử dụng lớp TemporaryFolder (thuộc loại TestRule ) do khung công tác JUnit cung cấp để tạo một thư mục tạm thời cho tất cả các trường hợp thử nghiệm của chúng tôi và thư mục tạm thời sẽ bị xóa khi và khi trường hợp thử nghiệm được chạy. Chúng ta cần tạo một biến mới kiểu TemporaryFolder và cần chú thích bằng @Rule như được chỉ định bên dưới,
package com.tutorialspoint.espressosamples.helloworldapp;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import java.io.File;
import java.io.IOException;
import static junit.framework.TestCase.assertTrue;
import static org.junit.Assert.assertEquals;
public class ComputationUnitTest {
private static Computation computation = null;
@Rule
public TemporaryFolder folder = new TemporaryFolder();
@Test
public void file_isCreated() throws IOException {
folder.newFolder("MyTestFolder");
File testFile = folder.newFile("MyTestFile.txt");
assertTrue(testFile.exists());
}
@BeforeClass
public static void CreateComputationObject() {
computation = new Computation();
}
@AfterClass
public static void DestroyComputationObject() {
computation = null;
}
@Test
public void sum_isCorrect() {
assertEquals(4, computation.Sum(2,2));
}
@Test
public void multiply_isCorrect() {
assertEquals(4, computation.Multiply(2,2));
}
}
Lệnh thực hiện
Trong JUnit , các phương thức được chú thích bằng các chú thích khác nhau sẽ được thực thi theo thứ tự cụ thể như hình dưới đây,
@BeforeClass
@Rule
@Before
@Test
@After
@AfterClass
Quả quyết
Khẳng định là một cách để kiểm tra xem giá trị mong đợi của trường hợp thử nghiệm có khớp với giá trị thực của kết quả trường hợp thử nghiệm hay không. JUnit cung cấp xác nhận cho các kịch bản khác nhau; một số khẳng định quan trọng được liệt kê bên dưới -
fail() - Để thực hiện một cách rõ ràng một trường hợp thử nghiệm không thành công.
assertTrue(boolean test_condition) - Kiểm tra xem test_condition có đúng không
assertFalse(boolean test_condition) - Kiểm tra xem test_condition có sai không
assertEquals(expected, actual) - Kiểm tra xem cả hai giá trị đều bằng nhau
assertNull(object) - Kiểm tra xem đối tượng có rỗng không
assertNotNull(object) - Kiểm tra xem đối tượng không rỗng
assertSame(expected, actual) - Séc mà cả hai đều đề cập đến cùng một đối tượng.
assertNotSame(expected, actual) - Séc mà cả hai đều đề cập đến đối tượng khác nhau.