GP Coder

Trang chia sẻ kiến thức lập trình Java

  • Java Core
    • Basic Java
    • OOP
    • Exception Handling
    • Multi-Thread
    • Java I/O
    • Networking
    • Reflection
    • Collection
    • Java 8
  • Design pattern
    • Creational Pattern
    • Structuaral Pattern
    • Behavior Pattern
  • Web Service
    • SOAP
    • REST
  • JPA
  • Java library
    • Report
    • Json
    • Unit Test
  • Message Queue
    • ActiveMQ
    • RabbitMQ
  • All
Trang chủ Java library Unit Test Tổng hợp các bài viết về Unit Test trong Java

Tổng hợp các bài viết về Unit Test trong Java

Đăng vào 15/04/2019 . Được đăng bởi GP Coder . 25604 Lượt xem . Toàn màn hình

Để dễ dàng cho các bạn theo dõi và tìm hiểu về cách viết Unit Test trong Java. Bài này mình sẽ tổng hợp lại toàn bộ các bài viết về cách viết Unit Test với JUnit + Mockito + PowerMockito.

Nội dung

  • 1 Tìm hiểu về kiểm thử (Tesing) trong phát triển phần mềm
  • 2 Unit Testing trong phát triển phần mềm hiện đại
  • 3 Giới thiệu JUnit
  • 4 Một số Annotation cơ bản của JUnit
  • 5 Một số API của JUnit – Assert, Assume, Test Runner
  • 6 Làm thế nào để thực thi một nhóm các class test trong JUnit?
  • 7 JUnit – Parameterized Test
  • 8 Đơn giản hóa Unit Test với JUnit Rule
  • 9 JUnit – Hamcrest Matchers
  • 10 JUnit – Custom Hamcrest Matchers
  • 11 Làm thế nào để chạy lại một failed Test trong JUnit?
  • 12 Làm thế nào để lắng nghe các sự kiện mỗi khi một test được thực thi trong JUnit?
  • 13 JUnit – HTML Report với Surefire maven plugin
  • 14 Giới thiệu Mockito
  • 15 Mockito – Annotations
  • 16 Mockito – Control mock’s behavior
  • 17 Mockito – Verifying Behavior
  • 18 Giới thiệu Powermock
  • 19 PowerMockito – Suppressing Unwanted Behavior
  • 20 Làm sao test một Abstract Class trong Java?
  • 21 Test Web service

Tìm hiểu về kiểm thử (Tesing) trong phát triển phần mềm

Trong bài viết này sẽ giới thiệu cho các bạn biết về kiểm thử phần mềm (testing) trong phát triển phần mềm.

  • Kiểm thử (testing) là gì?
  • Ai sẽ là người test?
  • Thời điểm bắt đầu test
  • Khi nào thì dừng việc test
  • Phân loại Tesing
  • So sánh Manual Testing và Automation Testing

Unit Testing trong phát triển phần mềm hiện đại

Bài này sẽ giới thiệu chi tiết hơn về cách viết Unit Testing và mô hình phát triển phần mềm hiện đại TDD (Test-Driven Development). Ngoài ra, chúng ta cũng sẽ biết được cách xây dựng UT với mô hình đối tượng ảo (Mock Object).

Giới thiệu JUnit

Sau khi đã nắm được các khái niệm về Unit test, TDD, chúng ta sẽ cùng tìm hiểu về cách viết Unit Test trong Java với JUnit Framework. Cách cài đặt và sử dụng JUnit test với Eclipse. Làm sao kiểm tra độ bao phủ của Unit Test với plugin EclEmma.

Một số Annotation cơ bản của JUnit

Tìm hiểu cách sử dụng một số Annotation cơ bản của JUnit như @Before, @After, @BeforeClass, @AfterClass, @Test, @Test(expected=XxxException.class), @Ignore, @FixMethodOrder. Hiểu về lifecycle của một Test Class trong JUnit. Cách viết test một exception, timeout.

Một số API của JUnit – Assert, Assume, Test Runner

Trong bài này, chúng ta sẽ cùng tìm hiểu một số API của JUnit như Assert, Test Runner (JUnitCore), Test Suite, Assume.

  • JUnit Assert Class : JUnit cung cấp các phương thức static để kiểm tra các điều kiện nhất định thông qua lớp Assert. Các phương thức này thường bắt đầu với assertXxx(). Nó cho phép chúng ta xác định thông báo lỗi (error message), kết quả mong đợi (expected) và kết quả thực tế (actual). Các phương thức Assert so sánh giá trị thực tế được trả về bởi một phương thức test với giá trị mong đợi, nó ném một AssertionException nếu so sánh thất bại.
  • JUnit Assume Class: Annotation @Ingore cho phép chúng ta sử dụng để đánh dấu phương thức này để được bỏ qua (ignore/ disable), không cần thực thi test. Một cách khác để làm việc này là sử dụng Assume.assumeXxx() để định nghĩa điều kiện Test.
    • Assume.assumeFalse() : đánh dấu test là không hợp lệ, nếu điều kiện của nó đánh giá là đúng.
    • Assume.assumeTrue() : đánh giá test là không hợp lệ nếu điều kiện của nó đánh giá là sai.
  • JUnit Test Runner : bình thường, các IDE như NetBeans, Eclipse đều có sẵn trình chạy (runner) cho JUnit để hiển thị kết quả các test case. Chúng ta có thể gọi một API được hỗ trợ từ JUnit để thực thi các class test một cách thủ công thông qua JUnitCore.

Làm thế nào để thực thi một nhóm các class test trong JUnit?

Thông thường một class test sẽ sử dụng để test cho một chức năng, một unit. Nếu chúng ta có một vài test class, và mong muốn có thể kết hợp chúng thành một nhóm/ bộ kiểm tra. Chúng ta có thể làm được điều này bằng cách sử dụng Test Suite hoặc Categories Test.

JUnit – Parameterized Test

Trong bài viết này, chúng ta sẽ cùng tìm hiểu cách tạo và thực hiện các test case với tham số hóa trong Junit (parameterized test).

Đơn giản hóa Unit Test với JUnit Rule

Rule (quy tắc) trong JUnit 4 là một thành phần cho phép chúng ta viết code để thực hiện một số công việc trước và sau khi phương thức test thực thi. Trong bài này, chúng ta sẽ cùng tìm hiểu một số Rule có sẵn trong JUnit 4 (TemporaryFolder Rule, TemporaryFolder Rule, …) và cách tự viết một custom rule.

JUnit – Hamcrest Matchers

Trong bài này, chúng ta sẽ cùng tìm hiểu Matcher là gì, cách cài đặt và sử dụng thư viện Hamcrest Matchers để verify các Collections, Number, XML, bean, number, text, object, …

JUnit – Custom Hamcrest Matchers

Tiếp tục với thư viện Hamcrest Matchers, trong bài này chúng ta sẽ cùng tìm hiểu cách tự viết một Matcher cho riêng mình.

Làm thế nào để chạy lại một failed Test trong JUnit?

Đôi khi chúng ta gặp một số vấn đề ngoài ý muốn khi thực thi Unit test như lỗi kết nối internet, kết nối database, thiếu tài nguyên, … dẫn đến test case của chúng ta bị fail. Trong những trường hợp đó, chúng ta mong muốn có thể thực thi lại các test case một cách tự động. Nhưng bằng cách nào chúng ta có thể làm được điều này với JUnit? Chúng sẽ được giải đáp trong bài viết này.

Làm thế nào để lắng nghe các sự kiện mỗi khi một test được thực thi trong JUnit?

Trong bài này chúng ta sẽ cùng tìm hiểu về JUnit Listener và cách để lắng nghe các sự kiện mỗi khi một test được thực thi trong JUnit.

JUnit – HTML Report với Surefire maven plugin

Sau khi viết test và thực thi, chúng ta cũng cần xuất kết quả ra một file nào đó để dễ dàng theo dõi và báo cáo với xếp, với khách hàng. Chúng ta có thể thực hiện một cách tự động thông qua Surefire maven plugin, đây là một plugin của maven cho phép xuất báo cáo (report) kết quả test ra tập tin HTML.

Giới thiệu Mockito

Trong nhiều trường hợp, phương thức cần test của chúng ta gọi đến nhiều phương thức, service khác mà các phương thức này chưa được cài đặt (implement) hoặc tốn nhiều chi phí để thực thi test nhiều lần. Để đảm bảo unit test không phụ thuộc vào nhau, mỗi unit test độc lập được thực thi đúng, chúng ta phải giả định rằng các phương thức được gọi đến đang xử lý đúng. Mockito giúp ta giả lập kết quả của các phương thức liên quan để tập trung viết test cho phương thức hiện tại.

Trong bài viết này, chúng ta sẽ nắm được:

  • Mokito là gì?
  • Phân loại Mock/ Test Double
  • Cài đặt Mockito
  • Sử dụng Mockito với JUnit Test

Mockito – Annotations

Trong bài viết này chúng ta sẽ cùng tìm hiểu một số Annotation của Mockito như @Mock, @Spy, @Captor, @InjectMocks để viết test cho các behavior.

  • @Mock : Annotation @Mock được sử dụng để khởi tạo một mock object và inject giá trị này cho field này. Chúng ta không tạo ra các đối tượng thực sự, thay vào đó yêu cầu Mockito tạo ra một đối tượng giả cho class này, các phương thức của class này không được thực thi thực sự, do đó trạng thái của đối tượng không bị thay đổi.
  • @Spy : Annotation @Spy được sử dụng để wrap một object thật, có thể gọi xử lý thật sự ở object này, tuy nhiên chúng ta có thể spy một số phương thức trên đối tượng thật như với @Mock.
  • @InjectMocks :
    • Trong một số trường hợp, chúng ta cần tạo một object test mà object này chứa các dependency khác. Vì vậy, chúng ta cần phải tạo các Mock/ Spy object cho các dependency và inject chúng vào đối tượng test. Để làm được điều này, chúng ta có thể sử dụng Annotation
    • @InjectMocks. @InjectMocks được sử dụng ở mức field, để đánh dấu các field này cần inject các dependency. Mokito cố gắng inject các giá trị cho các field này thông qua constructor, setter hoặc property injection. Nó sẽ không throw bất kỳ lỗi nào nếu không tìm được injection phù hợp.

Mockito – Control mock’s behavior

Toàn bộ ý tưởng của việc tạo một mock object là có thể kiểm soát behavior của nó. Nếu một phương thức của mock được gọi, nó sẽ xử lý theo cách mà chúng ta có thể điều khiển được. Trong bài viết này, chúng ta sẽ cùng tìm hiểu các cách để điều khiển behavior của một đối tượng giả (mock object).

Một số kiến thức các bạn sẽ nhận được trong bài viết này:

  • Stubbing Methods sử dụng cấu trúc: when().thenXxx().
  • Stubbing Methods sử dụng cấu trúc: doXxx().when().
  • Argument matchers.

Mockito – Verifying Behavior

Khi viết Unit Test, chúng ta cần thực hiện một số Assert để xác nhận expected result và actual result là như nhau. Đối với các mock object, chúng ta cũng cần verify một vài behavior đã được gọi hay chưa. Trong Mockito, chúng ta có thể thực hiện verify các mock object thông qua phương thức Mockito.verfify().

Sau bài viết này các bạn sẽ biết được cách:

  • Verify số lần phương thức được gọi.
  • Verify các tham số (argument) của phương thức.
  • Verify thứ tự phương thức được gọi.
  • Verify thời gian thực thi (timeout).

Giới thiệu Powermock

PowerMock là một Java mock framework được sử dụng để giải quyết các vấn đề mà thường được coi là khó khăn hoặc thậm chí không thể viết Unit Test, chẳng hạn như static method, static class, final class, private method, contructor.

Trong bài viết này, chúng ta sẽ tìm hiểu về cách cài đặt và sử dụng PowerMockito để test một số trường hợp thường gây khó khăn trên.

PowerMockito – Suppressing Unwanted Behavior

Trong bài viết này chúng ta sẽ cùng tìm hiểu cách sử dụng PowerMockito để viết test cho một số trường hợp đặc biệt như các static initializer, constructor, method, … gọi đến các 3rd party hay nó chưa được implement.

  • Suppress own constructor – Tạo instance một class mà không gọi constructor của chính nó
  • Suppress super class constructor – Tạo instance của một class nhưng không gọi constructor của super class
  • Suppress method – Ngăn thực thi một phương thức
  • Suppress fields – Ngăn khởi tạo giá trị mặc định cho một field
  • Suppress static initializer – Ngăn khởi tạo giá trị cho static method, static block

Làm sao test một Abstract Class trong Java?

Trong Java, các abstract class được sử dụng để định nghĩa các behavior có thể có của một class, với một danh sách các phương thức trừu tượng (abstract method) sẽ được implement bởi sub-class. Về cơ bản, nó cũng có thể bao gồm một vài phương thức đã được implement logic, do đó nó cũng cần được cover bởi Unit Test. Tuy nhiên, một abstract class không thể được khởi tạo instance một cách trực tiếp thông qua từ khóa new. Do đó, nó cũng cần một số cách đặt biệt để viết test, chúng ta sẽ cùng tìm hiểu trong bài viết này.

Một số trường hợp thường gặp:

  • Trường hợp test một abstract method độc lập.
  • Trường hợp test một abstract method được gọi bởi một method khác.

Test Web service

Làm thế nào để Test Jersey Rest API với JUnit?

Bất kỳ ứng dụng nào cũng vậy, sau khi code xong thì chúng ta cần phải test để đảm bảo chương trình của chúng ta hoạt động đúng. Chúng ta có thể sử dụng các tool để test SOAP WS sử dụng SOAP UI tool hay test REST WS sử dụng SOAP UI, Postman. Sử dụng tool bên ngoài để test API cũng là một giải pháp tốt. Đối với developer, chúng ta có thể viết code Unit Test để test API một cách tự động và dễ dàng.

Trong bài này tôi sẽ hướng dẫn các bạn cách viết Unit Test để test Jersey REST API sử dụng Jersey Test. Sau bài này các bạn sẽ nắm được:

  • Test REST API cần test những gì?
  • Cách viết test REST API sử dụng Jersey Test.

Test REST Web Service đơn giản hơn với REST Assured

Ở bài viết trên, tôi đã giới thiệu với các bạn cách test REST API trong Jersey project. Giả sử bây giờ chúng ta cần sử dụng API của bên thứ 3 (không phải source code trong jersey project của chúng ta), khi đó ta không thể sử dụng Jersey Test. Khi đó, chúng ta cần một thư viện khác có thể giúp chúng ta gửi một request thật để verfiy kết quả trả về.

Trong bài này tôi sẽ giới thiệu với các bạn một thư viện rất mạnh mẽ để test web service, đó chính là REST Assured. Nó cho phép chúng ta gửi một HTTP request thật và verify trên kết quả trả về một cách dễ dàng.

Giới thiệu Castle Mock – Mock REST APIs và SOAP web-services

Trong quá trình phát triển hệ thống hoặc quá trình testing, một trong những vấn đề khó khăn là khi hệ thống của bạn cần tích hợp với một bên thứ ba (3rd party). Do sử dụng API của bên thứ ba nên chúng ta có thể gặp một số vấn đề sau:

  • Bên thứ ba không có hoặc không cung cấp hệ thống test cho chúng ta.
  • Bên thứ 3 đang phát triển API song song với chúng ta hoặc chưa hoàn thành API cho chúng ta sử dụng.
  • Không thể gọi API thật để test: gặp vấn đề về chi phí và bảo mật.
  • Gọi service của bên thứ ba để viết Unit Test rất chậm và đôi khi service của họ die dẫn đến Unit Test của chúng ta failed không mong muốn.

Để giải quyết vấn đề này, mình cần thu thập API document của họ, và dựng nên con mock service, trả về đúng những trường hợp cần sử dụng trong requirement API document và để team tích hợp.

Trong bài viết này mình sẽ giới thiệu về 1 Mock service rất dễ sử dụng là Castle Mock.

Sau bài này các bạn sẽ nắm được:

  • Castle Mock là gì?
  • Một số tính năng nỗi bật của Castle Mock.
  • Cách cài đặt Castle Mock.
  • Cách sử dụng Castle Mock để tạo mock serivces cho REST và SOAP project.
4.8
20
Nếu bạn thấy hay thì hãy chia sẻ bài viết cho mọi người nhé! Và Donate tác giả

Shares

Chuyên mục: Unit Test Được gắn thẻ: JUnit, Mockito, PowerMockito, Unit Test

Làm sao test một Abstract Class trong Java?
Giới thiệu Java Logging

Có thể bạn muốn xem:

  • Mockito – Annotations (28/03/2019)
  • JUnit – Custom Hamcrest Matchers (18/03/2019)
  • Giới thiệu JUnit (04/03/2019)
  • Làm thế nào để chạy lại một failed Test trong JUnit? (21/03/2019)
  • JUnit – Hamcrest Matchers (14/03/2019)

Bình luận

bình luận

Tìm kiếm

Bài viết mới

  • Clean code 13/01/2024
  • Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud 02/10/2020
  • Kết nối RabbitMQ sử dụng Web STOMP Plugin 19/06/2020
  • Sử dụng publisher confirm trong RabbitMQ 16/06/2020
  • Sử dụng Dead Letter Exchange trong RabbitMQ 13/06/2020

Xem nhiều

  • Hướng dẫn Java Design Pattern – Factory Method (98132 lượt xem)
  • Hướng dẫn Java Design Pattern – Singleton (97753 lượt xem)
  • Giới thiệu Design Patterns (87905 lượt xem)
  • Lập trình đa luồng trong Java (Java Multi-threading) (86527 lượt xem)
  • Giới thiệu về Stream API trong Java 8 (83930 lượt xem)

Nội dung bài viết

  • 1 Tìm hiểu về kiểm thử (Tesing) trong phát triển phần mềm
  • 2 Unit Testing trong phát triển phần mềm hiện đại
  • 3 Giới thiệu JUnit
  • 4 Một số Annotation cơ bản của JUnit
  • 5 Một số API của JUnit – Assert, Assume, Test Runner
  • 6 Làm thế nào để thực thi một nhóm các class test trong JUnit?
  • 7 JUnit – Parameterized Test
  • 8 Đơn giản hóa Unit Test với JUnit Rule
  • 9 JUnit – Hamcrest Matchers
  • 10 JUnit – Custom Hamcrest Matchers
  • 11 Làm thế nào để chạy lại một failed Test trong JUnit?
  • 12 Làm thế nào để lắng nghe các sự kiện mỗi khi một test được thực thi trong JUnit?
  • 13 JUnit – HTML Report với Surefire maven plugin
  • 14 Giới thiệu Mockito
  • 15 Mockito – Annotations
  • 16 Mockito – Control mock’s behavior
  • 17 Mockito – Verifying Behavior
  • 18 Giới thiệu Powermock
  • 19 PowerMockito – Suppressing Unwanted Behavior
  • 20 Làm sao test một Abstract Class trong Java?
  • 21 Test Web service

Lưu trữ

Thẻ đánh dấu

Annotation Authentication Basic Java Behavior Pattern Collection Creational Design Pattern Cấu trúc điều khiển Database Dependency Injection Design pattern Eclipse Exception Executor Service Google Guice Gson Hibernate How to Interceptor IO Jackson Java 8 Java Core JDBC JDK Jersey JMS JPA json JUnit JWT Message Queue Mockito Multithreading OOP PowerMockito RabbitMQ Reflection Report REST SOAP Structuaral Pattern Swagger Thread Pool Unit Test Webservice

Liên kết

  • Clean Code
  • JavaTpoint
  • Refactoring Guru
  • Source Making
  • TutorialsPoint
  • W3Schools Online Web Tutorials

Giới thiệu

GP Coder là trang web cá nhân, được thành lập với mục đích lưu trữ, chia sẽ kiến thức đã học và làm việc của tôi. Các bài viết trên trang này chủ yếu về ngôn ngữ Java và các công nghệ có liên quan đến Java như: Spring, JSF, Web Services, Unit Test, Hibernate, SQL, ...
Hi vọng góp được chút ít công sức cho sự phát triển cộng đồng Coder Việt.

Donate tác giả

Tìm kiếm các bài viết của GP Coder với Google Search

Liên hệ

Các bạn có thể liên hệ với tôi thông qua:
  • Trang liên hệ
  • Linkedin: gpcoder
  • Email: contact@gpcoder.com
  • Skype: ptgiang56it

Follow me

Copyright 2025 © GP Coder · All Rights Reserved · Giới thiệu · Chính sách · Điều khoản · Liên hệ ·

Share

Blogger
Delicious
Digg
Email
Facebook
Facebook messenger
Flipboard
Google
Hacker News
Line
LinkedIn
Mastodon
Mix
Odnoklassniki
PDF
Pinterest
Pocket
Print
Reddit
Renren
Short link
SMS
Skype
Telegram
Tumblr
Twitter
VKontakte
wechat
Weibo
WhatsApp
X
Xing
Yahoo! Mail

Copy short link

Copy link