Cập nhật nội dung chi tiết về Viết Unit Test Cho Spring Boot Application mới nhất trên website Honggaitour.com. Hy vọng thông tin trong bài viết sẽ đáp ứng được nhu cầu ngoài mong đợi của bạn, chúng tôi sẽ làm việc thường xuyên để cập nhật nội dung mới nhằm giúp bạn nhận được thông tin nhanh chóng và chính xác nhất.
Đầu tiên, mình sẽ tạo mới một ứng dụng Spring Boot đơn giản để làm ví dụ:
Class Hello:
Class này định nghĩa một method cho phép chúng ta truyền tên và nó sẽ return lại chuỗi “Hello” cộng với tên mà các bạn truyền vào.
Class Calculation:
Class này cho phép chúng ta tính tổng của 2 số.
Kết quả khi chạy chương trình này sẽ như sau:
Ý tưởng là chúng ta cần viết Unit Test để kiểm tra khi ứng dụng chạy, 2 bean của các class Hello và Calculation phải được khởi tạo trong Spring container và các method của chúng phải return đúng giá trị mà chúng ta mong muốn.
Để làm được điều này, trước tiên các bạn cần make sure là dependency của Spring Boot Test được khai báo trong trong tập tin chúng tôi của các bạn. Của mình khi tạo Spring Boot project sử dụng Spring Tool Suite, nó đã được include như sau:
Có thể các bạn sẽ thắc mắc tại sao mặc định khi tạo Spring Boot project, phần Spring Boot Starter Test này lại exclude thư viện junit-vintage-engine đi. Nguyên nhân là bởi vì junit-vintage-engine là cho JUnit 4 và JUnit 3, chúng ta nên sử dụng latest version của JUnit là JUnit 5. Với khai báo dependency cho JUnit 5 như sau:
Để viết Unit Test cho Spring Boot application, các bạn chỉ cần khai báo trong class Test một Annotation của Spring Boot Test @SpringBootTest là xong. Ví dụ:
Hay:
Class SpringBootUnitTestApplicationTests thì đã được thêm tự động rồi:
Với annotation @SpringBootTest này, Spring Boot Test sẽ tự động chạy một Spring container và khởi tạo các bean trong Spring container này trong lúc chúng ta chạy test.
Bean của các class nào sẽ được khởi tạo trong Spring container tuỳ thuộc vào cấu hình của chúng ta.
Nếu các bạn khai báo thêm annotation @ContextConfiguration với value là các class chứa định nghĩa thông tin bean thì chỉ những bean được định nghĩa trong các class này mới được khởi tạo.
Nếu các bạn không khai báo thêm annotation @ContextConfiguration thì Spring Boot Test sẽ tự động scan những class nào được khai báo với annotation @Configuration và được sử dụng với annotation @SpringBootConfiguration để khởi tạo bean.
Trong ví dụ của mình thì mình đang sử dụng cơ chế auto component scan để khởi tạo bean trong Spring, không khai báo bean một cách tường minh nên những bean này là được sử dụng với annotation @SpringBootConfiguration để khởi tạo.
Các bạn có thể thêm code test để kiểm tra các bean của các class Hello và Calculation phải được khởi tạo trong class SpringBootUnitTestApplicationTests như sau:
Test cho các class Hello và Calculation sẽ như sau:
Nếu các bạn chỉ muốn test class Hello, các bạn có thể tạo mới một class TestConfiguration với nội dung như sau:
Rồi sau đó sử dụng annotation @ContextConfiguration để khai báo class TestConfiguration này vào để viết test:
Trong trường hợp này, các bạn sẽ không thể lấy bean của class Calculation. Ví dụ:
Sẽ gặp lỗi ngay:
Hướng Dẫn Viết Unit Test Java
Hướng Dẫn Viết Unit Test Java, Hướng Dẫn Viết Unit Test Php, Hướng Dẫn Viết Unit Test, Cách Viết Unit Test, Test For Unit 10 Mai Lan Hương, Mai Lan Hương 7 Test For Unit 16, Giải Bài Tập Mai Lan Hương Lớp 9 Test For Unit 7, Hướng Dẫn Cài Đặt Java 8, Huong Dan Bien Dich Compile Code Java Va Sua Loi Bien Dich Code Java, Test Unit 3, Test Of Unit 1&2, Test For Unit 2 Lớp 7, Test Unit 9 Lớp 6, Test For Unit 6, Test ( Unit 8 ), Test Unit 11, Test 2 Unit 10 Lớp 10, Test Unit 9, Test Of Unit 3, Unit 6 Test 2 Lớp 9, Test Unit 5, Test Unit 2 Lớp 8, Test Unit 7, Test Unit 7 Lớp 6, Test Unit 8 Lop 6, Unit 7( Test) Lop 6, Test 2 Unit 6, Dap An Test For Unit 1 Lop 8, Test Of Unit 1′, Test Unit 2 Lớp 7, Test For Unit 10 Lớp 7, Test Four Unit 10, Trở Về ‘test Of Unit 1&2’, Unit 8 Test chúng tôi Test For Unit 9, ‘test Of Unit 1&2’, Test Unit 5 Lớp 7, Test Unit 1 Lop 8, Test 1 Unit 4, Test For Unit 16, Test For Unit 7 English 7, Luu Hoang Tri Test Unit 7, Lưu Hoằng Trí 9 Test 2 Unit 7, Bai Test Unit 8 Lop6, Test For Unit 9 English 10 Có Đáp án, Tiếng Anh 12 Unit 7 Test 2, Lưu Hoàng Trí 6 Test Unit 11, Lưu Hoằng Trí 7 Test Unit 5, Test Unit 1 Lớp 8 Lưu Hoằng Trí, Test Unit 7 Iưu Hoăng Trí, Test Unit 2 English 9, Test (unit 11) Page 106, Dap An Bt Tieng Anh Unit 8 Test, Test Unit 7 Lưu Hoằng Trí 6, Test For Unit 10 English 8, Test Unit 8 Lưu Hoằng Trí 10, Lưu Hoằng Trí 7 Test Unit 10, Lưu Hoằng Trí Lớp 8 Có Đáp án Test Unit 1, Test Progress Unit 2, Key Unit 7 Culture Test, Test (unit 90 Trang 88 , Đáp án Anh Lưu Hoằng Trí 9 Test 2 Unit 6, Test Unit 10 Luu Hoang Tri 6, Test ( Unit 8 ) Lưu Hoằng Trí, Test For Unit 16 English 10, Test Unit 8 Luu Hoang Tri Lop 6, Test 2 Unit 2 Lớp 10 Nguyễn Hoằng Trí, Dap An Bai Tap Tieng Anh Lop 8 Luu Hoang Tri Test Unit 4, Solutions Intermediate Test Unit 3, Solutions 2nd Edition Unit 7 Test, Đáp án Objective Practice Test Of Unit 2, Solutions Pre Intermediate Test Unit 3, Jetstream Intermediate Unit 4 Test, Unit 7 Personal Finance Test, Objective Practice Test Of Unit 2 Lớp 10 Có Đáp An, Khái Niệm Unit Test, Định Nghĩa Unit Test, Solutions Elementary Unit 1 Test, Tiếng Anh Lưu Hoằng Trí Unit 7 Test , Giải Sách Lưu Hoằng Trí Lớp 6 Test Unit 7, Giai Test Unit 7 Sach Bai Tap Lop 6 Luu Hoang Tri, Key Unit Test 7 Culture Market Leader, Unit Test Market Leader Intermediate, Solutions Intermediate Unit 9 Progress Test, Progress Test 2 Unit 7-12 New Headway Intermediate, Sach Giai Luu Hoang Tri 6 Unit 7 Bai Test, Giáo Trình Lập Trình Hướng Đối Tượng Với Java, Hướng Dẫn Làm Test Denver Ii, Hướng Dẫn Sử Dụng T-test, Hướng Dẫn Đăng Ký Bản Test Liên Quân, Java, Bài Tập Oop Java, 4 Bộ Từ Điển Java, Quy ước Đặt Tên Trong Java, Tài Liệu Hướng Dẫn Sử Dụng Gmetrix Sms Ic3 Gs4 Practice Test Voucher, Tiểu Luận Java, Giáo Trình Java, Sách Học Lập Trình Java, 2 Cuốn Sách Học Java, Tài Liệu Lập Trình Java,
Hướng Dẫn Viết Unit Test Java, Hướng Dẫn Viết Unit Test Php, Hướng Dẫn Viết Unit Test, Cách Viết Unit Test, Test For Unit 10 Mai Lan Hương, Mai Lan Hương 7 Test For Unit 16, Giải Bài Tập Mai Lan Hương Lớp 9 Test For Unit 7, Hướng Dẫn Cài Đặt Java 8, Huong Dan Bien Dich Compile Code Java Va Sua Loi Bien Dich Code Java, Test Unit 3, Test Of Unit 1&2, Test For Unit 2 Lớp 7, Test Unit 9 Lớp 6, Test For Unit 6, Test ( Unit 8 ), Test Unit 11, Test 2 Unit 10 Lớp 10, Test Unit 9, Test Of Unit 3, Unit 6 Test 2 Lớp 9, Test Unit 5, Test Unit 2 Lớp 8, Test Unit 7, Test Unit 7 Lớp 6, Test Unit 8 Lop 6, Unit 7( Test) Lop 6, Test 2 Unit 6, Dap An Test For Unit 1 Lop 8, Test Of Unit 1′, Test Unit 2 Lớp 7, Test For Unit 10 Lớp 7, Test Four Unit 10, Trở Về ‘test Of Unit 1&2’, Unit 8 Test chúng tôi Test For Unit 9, ‘test Of Unit 1&2’, Test Unit 5 Lớp 7, Test Unit 1 Lop 8, Test 1 Unit 4, Test For Unit 16, Test For Unit 7 English 7, Luu Hoang Tri Test Unit 7, Lưu Hoằng Trí 9 Test 2 Unit 7, Bai Test Unit 8 Lop6, Test For Unit 9 English 10 Có Đáp án, Tiếng Anh 12 Unit 7 Test 2, Lưu Hoàng Trí 6 Test Unit 11, Lưu Hoằng Trí 7 Test Unit 5, Test Unit 1 Lớp 8 Lưu Hoằng Trí, Test Unit 7 Iưu Hoăng Trí,
Viết Unit Test Trong C# Với Nunit
Ở trường đại học chắc các bạn đã được học khái niệm về Unit Test trong môn “Kiểm thử chất lượng phần mềm”. Nói một cách dễ hiểu, unit test tức là code dùng để test code ta đã viết.
Một số đặc điểm của unit test:
Code unit test phải ngắn gọn, dễ hiểu, dễ đọc.
Mỗi unit test là 1 đơn vi riêng biệt, độc lập, không phụ thuộc vào unit khác.
Mỗi unit test là 1 method trong test class, tên method cũng là tên UnitTest. Do đó ta nên đặt tên hàm rõ ràng, nói rõ unit test này test cái gì (Test_A_Do_B), tên method có thể rất dàiii cũng không sao.
Unit Test phải nhanh, vì nó sẽ được chạy để kiểm định lỗi mỗi lần build. Do đó trong unit test nên hạn chế các task tốn thời gian như gọi I/O, database, network,…
Unit Test nên test từng đối tượng riêng biệt. Vd: Unit Test cho Business Class thì chỉnh test chính BusinessClass đó, không nên dụng tới các class móc nối với nó (DataAccess Class chẳng hạn).
Một số bạn sẽ thắc mắc: “Ơ hay, trong business class thì phải gọi data access chứ?”, và “code mình dính chùm lắm, làm sao test từng class riêng được”.
Để viết unit test, các class của bạn phải có quan hệ “lõng lẽo” với nhau (loose coupling), nếu không viết được unit test nghĩa là các class dính với nhau quá chặt, sẽ khó thay đổi sau này. Hãy áp dụng các nguyên lý SOLID vào code, viết code với tư tưởng “viết sao để unit test được” sẽ là code của bạn uyển chuyển, dễ test hơn.
Về vấn đề Business Class và Data Access, các class không nên gọi trực tiếp lẫn nhau mà gọi thông qua interface. Khi unit test, ta sẽ thay các hiện thực interface này bằng các class giả, thay thế cho class data access thật. Mình sẽ nói rõ về vấn đề này ở những bài viết về Inversion of Control, Dependency Injection trong tương lai.
Một số lợi ích của Unit Test:
Nếu viết Unit Test một cách cẩn thận, code của bạn sẽ ít lỗi hơi, vì Unit Test sẽ phát hiện lỗi cho bạn.
Phát hiện những hàm chạy chậm và không hiệu quả thông qua thời gian chạy của Unit Test.
Tăng sự tự tin khi code, vì đã có Unit Test phát hiện lỗi.
Khi refactor code, sửa code hay thêm chức năng mới, Unit Test đảm bảo chương trình chạy đúng, phát hiện những lỗi tiềm tàng mà ta bỏ lỡ.
Unit Test trong C# với NUnit
Trước đây, để viết Unit Test trong C#, ta thường phải tạo một project test riêng, sử dụng thư viện MSTest của Microsoft. MSTest hỗ trợ khá nhiều chức năng: Test dữ liệu từ database, đo performance hệ thống, xuất dữ liệu report. Tuy nhiên, do MSTest đi kèm với Visual Studio, không thể chạy riêng rẽ, lại khá nặng nề, do đó NUnit được nhiều người ưa thích hơn. NUnit có 1 bộ runner riêng, có thể chạy UnitTest độc lập không cần VisualStudio, ngoài ra nó cũng hỗ trợ một số tính năng mà MSTest không có (parameter test, Assert Throw).
Nếu bạn chưa bao giờ viết Unit Test, bắt đầu với NUnit cũng là 1 lựa chọn không tồi. Đầu tiên, ta hãy tạo 1 project console trong Visual Studio. Ta viết 1 class Calculator với các 2 hàm Add và Subtract:
public class Calculator { public int Add(int x, int y) { return x + y; } public int Subtract(int x, int y) { return x - y; } } using NUnit.Framework; [TestFixture] public class CalculatorTest { private Calculator _cal; [SetUp] public void Setup() { _cal = new Calculator(); } [Test] public void OnePlusOneEqualTwo() { Assert.AreEqual(2, _cal.Add(1, 1)); } [Test] public void TwoPlusTwoEqualFour() { Assert.AreEqual(4, _cal.Add(2, 2)); } [Test] public void FourPlusOneEqualFive() { Assert.AreEqual(5, _cal.Add(4, 1)); } }Giải thích một số annotation:
Annotation [TextFixture] đặt vào đầu class chứa các unit test, đánh dấu đây là một bộ các unit test.
Annotation [SetUp] để đánh dấu hàm setup. Hàm này sẽ được chạy vào đầu mỗi unit test.
Để chạy Unit Test, ta cần cài NUnit.TestAdapter, đây là bộ runner cho phép chạy các Unit Test của NUnit trong Visual Studio. Bạn cũng có thể dùng 1 trong 2 cách sau:
Tải NUnit GuiRunner về, mở file dll của project test, các unit test sẽ hiện ra để chạy.
Tải Reshaper. Reshaper cũng tích hợp sẵn 1 bộ Runner cho phép chạy Unit Test của NUnit.
Ta cố ý sửa lại code để code chạy sai. Chạy lại Unit Test, ta sẽ thấy các case đã fail. Unit Test đã tự động bắt lỗi chương trình cho bạn rồi đấy. Bấm vào từng test case, ta sẽ thấy kết quả mong muốn ở đoạn ” Excepted“, kết quả code chạy ở đoạn ” But was “.
Unit Test Siêu Cơ Bản Với Java
Khi viết ra một đoạn code, ngoài việc nó chịu chạy ra thì chúng ta cần phải đảm bảo nó chạy đúng với ý đồ của mình (đề bài, yêu cầu,…). Mọi người thường dùng cách in từng kết quả ra màn hình và kiểm tra bằng mắt, điều này rất tốn công sức cũng như thời gian. Unit Test ra đời để giúp ta phần nào đơn giản hóa câu chuyện này.
Unit Test là gì?
Trong kiểm thử phần mềm có 4 mức độ kiểm thử: Unit test ( kiểm thử mức đơn vị), Intergration test ( kiểm thử tích hợp), System test (kiểm thử hệ thống), Acceptance test (kiểm thử chấp nhận).
Unit test là mức độ kiểm thử nhỏ nhất trong quy trình kiểm thử phần mềm. Unit test kiểm thử các đơn vị nhỏ nhất trong mã nguồn như method, class, chúng tôi đó Unit test nhằm kiểm tra mã nguồn của các chương trình, các chức năng riêng rẽ hoạt động đúng hay không.
Unit testing được thực hiện bởi lập trình viên.
Hướng dẫn Unit Test với Java
Hôm nay mình sẽ hướng dẫn các bạn sử dụng Junit để làm test case cho Java. Trước tiên chúng ta cần chuẩn bị vài thứ:
1. Tạo project
Sau khi tạo xong project, các bạn thấy file pom.xml.
Chúng ta thêm các thư viện Junit thông qua chúng tôi thay vì add file jar như lúc sử dụng ant.
2. Viết vài dòng code để có chuyện mà test nè
Tạo một class MathUtil ở ..srcmainjava
MathUtil
public class MathUtil { public int sum(int a, int b){ return a+b; } }3. Tạo testcase version đơn giản
Chúng ta viết vài test case nhẹ nhàng thông qua Annotation @Test và hàm assertEquals().
Tạo một class MathUtilTest tại ..srctestjava
import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; public class MathUtilTest { MathUtil util = new MathUtil(); @Test void test1(){ assertEquals(util.sum(1,1),2); } @Test void test2(){ assertEquals(util.sum(1,1),3); } @Test void test3(){ assertEquals(util.sum(1,2),3); } }Khi chạy test, nó sẽ kiểm tra tất cả các Expected và Actual, nó chỉ cho bạn pass khi tất cả đều thành công, chỉ cần có 1 test sai xem như test fail. (Giống như toán tử and vậy đó).
Khi có sai sót xảy ra, nó sẽ hiện thông báo lên màn hình là test nào sai và sai cái gì.
Ví dụ nè, trong test2() mình để actual là (1+1) nhưng expected là 3 vì thế nó sẽ sai, toàn bộ bài test coi như 0 điểm :v
4. Unit Test với file csv
Thay vì viết từng testcase mệt mỏi thế này, chúng ta có thể sử dụng file csv để làm test case, đưa vào chỉ cần chạy file và trả kết quả thôi.
Tạo một file chúng tôi tại .srcmainresources
a, b, result 1, 1, 2 1, 2, 3 1, 3, 4 1, 4, 5 1, 5, 6 2, 1, 3 2, 2, 4 2, 3, 5 2, 4, 6 2, 5, 7tạo thêm 1 class MathUtilCsvTest.java
import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvFileSource; import static org.junit.jupiter.api.Assertions.*; public class MathUtilCsvTest { @ParameterizedTest @CsvFileSource(resources = "/Data.csv", numLinesToSkip = 1) void test(int a, int b, int result){ MathUtil math = new MathUtil(); assertEquals(math.sum(a,b),result); } }Tạm kết
Bạn đang đọc nội dung bài viết Viết Unit Test Cho Spring Boot Application trên website Honggaitour.com. Hy vọng một phần nào đó những thông tin mà chúng tôi đã cung cấp là rất hữu ích với bạn. Nếu nội dung bài viết hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất. Chúc bạn một ngày tốt lành!