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 Một số API của JUnit – Assert, Assume, Test Runner

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

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

Trong bài trước, chúng ta đã cùng tìm hiểu về một số Annotation cơ bản của JUnit. 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.

Nội dung

  • 1 JUnit Assert Class
  • 2 JUnit Assume Class
  • 3 JUnit Test Runner

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.

Chúng ta có thể sử dụng Assert để kiểm tra kết quả mong đợi cho các primitive type, Object, array primitive, array Object.

  • assertEquals(): So sánh 2 giá trị để kiểm tra bằng nhau. Test sẽ được chấp nhận nếu các giá trị bằng nhau.
  • assertTrue(): Đánh giá một biểu thức luận lý. Test sẽ được chấp nhận nếu biểu thức đúng.
  • assertFalse(): Đánh giá biểu thức luận lý. Test sẽ được chấp nhận nếu biểu thức sai.
  • assertNull(): So sánh tham chiếu của một đối tượng với giá trị null. Test sẽ được chấp nhận nếu tham chiếu là null.
  • assertNotNull(): So sánh tham chiếu của một đối tượng với null. Test sẽ được chấp nhận nếu tham chiếu đối tượng khác null.
  • assertSame(): So sánh địa chỉ vùng nhớ của 2 tham chiếu đối tượng bằng cách sử dụng toán tử ==. Test sẽ được chấp nhận nếu cả 2 đều tham chiếu đến cùng một đối tượng.
  • assertNotSame(): So sánh địa chỉ vùng nhớ của 2 tham chiếu đối tượng bằng cách sử dụng toán tử ==. Test sẽ được chấp nhận nếu cả 2 đều tham chiếu đến các đối tượng khác nhau.
  • assertArrayEquals(): So sánh 2 mảng để kiểm tra bằng nhau. Test sẽ được chấp nhận nếu các giá trị của 2 mảng là bằng nhau.
  • assertThat() : So sánh một giá trị thực tế có thõa mãn với 1 org.hamcrest.Matcher được xác định hay không. Với matchers có thể kiểm tra kết quả của một string, number, collections…
  • fail(): Phương thức này làm cho test hiện hành thất bại, phương thức này thường được sử dụng khi xử lý các ngoại lệ.

Mặc dù chúng ta có thể chỉ cần sử dụng phương thức assertTrue() cho gần như hầu hết các test case, tuy nhiên thì việc sử dụng một trong các phương thức assertXXX() cụ thể sẽ làm cho các test của chúng ta dễ hiểu hơn và cung cấp các thông điệp thất bại rõ ràng hơn.

Ví dụ:


package com.gpcoder.junit;

import static org.hamcrest.CoreMatchers.allOf;
import static org.hamcrest.CoreMatchers.anyOf;
import static org.hamcrest.CoreMatchers.both;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.everyItem;
import static org.hamcrest.CoreMatchers.hasItems;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.CoreMatchers.sameInstance;
import static org.hamcrest.CoreMatchers.startsWith;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;

import java.util.Arrays;

import org.hamcrest.core.CombinableMatcher;
import org.junit.Test;

public class AssertTest {

	@Test
	public void testAssertEquals() {
		assertEquals("failure - strings are not equal", "text", "text");
	}

	@Test
	public void testAssertArrayEquals() {
		int[] arr1 = { 1, 2, 3 };
		int[] arr2 = { 1, 2, 3 };
		assertArrayEquals("failure - two arrays not same", arr1, arr2);
	}

	@Test
	public void testAssertTrue() {
		assertTrue("failure - should be true", true);
	}

	@Test
	public void testAssertFalse() {
		assertFalse("failure - should be false", false);
	}

	@Test
	public void testAssertNull() {
		assertNull("should be null", null);
	}

	@Test
	public void testAssertNotNull() {
		assertNotNull("should not be null", new Object());
	}

	@Test
	public void testAssertSame() {
		Integer aNumber = Integer.valueOf(768);
		assertSame("should be same", aNumber, aNumber);
	}

	@Test
	public void testAssertNotSame() {
		assertNotSame("should not be same Object", new Object(), new Object());
	}

	@Test
	public void testFail() throws Exception {
		Assert.fail("Make fails a test");
	}
}

Ví dụ assertThat() và sử dụng Matcher của thư viện org.hamcrest chúng ta sẽ cùng tìm hiểu ở một bài viết khác.

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.
  • Assume.assumeNotNull(), Assume.assumeThat(), ….

Khi chúng ta sử dụng các phương thức Assume, nếu một test case bị fail, JUnit runner sẽ xem như là một phương thức được @Ignore.

Ví dụ:


package com.gpcoder.junit;

import static org.junit.Assume.assumeNotNull;
import static org.junit.Assume.assumeTrue;

import org.junit.Test;

public class AssumeTest {

	@Test
	public void assumeTrueTest() {
		assumeTrue(true);
		System.out.println("execute test");
	}

	@Test
	public void assumeNotNullTest() {
		Object object = null;
		assumeNotNull(object);
		System.out.println("execute test");
	}
}

Output của chương trình trên:

Như bạn thấy, phương thức assumeNotNullTest() mặc dù là fail, nhưng với việc sử dụng assumeNotNull() nên phương thức test này được đánh dấu như là @Ignore.

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, ví dụ:

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.

Để chạy từ chương trình Java ta sử dụng:


org.junit.runner.JUnitCore.runClasses(TestClass1.class, ...);

Để chạy từ console ta sử dụng:


java org.junit.runner.JUnitCore TestClass1 [...other test classes...]

Ví dụ:


package com.gpcoder.junit;

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunnerExample {

	public static void main(String[] args) {
		Result result = JUnitCore.runClasses(AssertTest.class);

		System.out.println("Test result: " + result.wasSuccessful());
		System.out.println("Total of runtime in milliseconds: " + result.getRunTime());
		System.out.println("Number of tests run: " + result.getRunCount());
		System.out.println("Number of tests ignore: " + result.getIgnoreCount());
		System.out.println("Number of tests failure: " + result.getFailureCount());
		for (Failure failure : result.getFailures()) {
			System.out.println("Failed -> " + failure.toString());
		}
	}
}

Output của chương trình:


Test result: false
Total of runtime in milliseconds: 9
Number of tests run: 9
Number of tests ignore: 0
Number of tests failure: 1
Failed -> testFail(com.gpcoder.junit.AssertTest): Make fails a test

 

Tài liệu tham khảo:

  • https://github.com/junit-team/junit4/wiki/Assertions
  • https://github.com/junit-team/junit4/wiki/Assumptions-with-assume
  • https://github.com/junit-team/junit4/wiki/Test-runners
5.0
03
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

Một số Annotation cơ bản của JUnit
Làm thế nào để thực thi một nhóm các class test trong JUnit?

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

  • JUnit – Parameterized Test (08/03/2019)
  • Test REST Web Service đơn giản hơn với REST Assured (26/08/2019)
  • Làm thế nào để Test Jersey Rest API với JUnit? (22/08/2019)
  • Làm thế nào để chạy lại một failed Test trong JUnit? (21/03/2019)
  • Giới thiệu JUnit (04/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 (97338 lượt xem)
  • Hướng dẫn Java Design Pattern – Singleton (96969 lượt xem)
  • Giới thiệu Design Patterns (86614 lượt xem)
  • Lập trình đa luồng trong Java (Java Multi-threading) (85454 lượt xem)
  • Giới thiệu về Stream API trong Java 8 (83004 lượt xem)

Nội dung bài viết

  • 1 JUnit Assert Class
  • 2 JUnit Assume Class
  • 3 JUnit Test Runner

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