1. 程式人生 > >怎麼使用Junit進行多執行緒測試

怎麼使用Junit進行多執行緒測試

Junit本身是不支援普通的多執行緒測試的,這是因為Junit的底層實現上,是用System.exit退出用例執行的,主執行緒終止jvm都停了,其他執行緒肯定執行不了了(具體分析檢視原始碼org.junit.runner.JUnitCore)。

本文介紹一款第三方工具groboutils,配合Junit實現多執行緒測試。

文件

Maven

<dependency>
    <groupId>net.sourceforge.groboutils</groupId>
    <artifactId>groboutils-core</artifactId
>
<version>5</version> </dependency>

示例

public class ThreadJunitDemo {

    private static final int THREAD_COUNT = 10;

    @Test
    public void testThreadJunit() {
        try {
            // Runner陣列,相當於併發多少個
            TestRunnable[] trs = new TestRunnable[THREAD_COUNT];
            for
(int i = 0; i < THREAD_COUNT; i++) { trs[i] = new TestRunnable() { @Override public void runTest() throws Throwable { commMethod(); } }; } // 用於執行多執行緒測試用例的Runner,將前面定義的單個Runner組成的陣列傳入
MultiThreadedTestRunner mttr = new MultiThreadedTestRunner(trs); // 併發執行數組裡定義的內容 mttr.runTestRunnables(); } catch (Throwable e) { e.printStackTrace(); } } private void commMethod() { System.out.println("===" + Thread.currentThread().getId() + "begin to execute ..."); for (int i = 0; i < 10; i++) { int a = i * 5; System.out.println(a); } System.out.println("===" + Thread.currentThread().getId() + "end to execute ..."); } }

TestRunnable

表示一個測試執行緒,例項需要實現該類的runTest()方法,在該方法中寫自己用的測試程式碼。

MultiThreadedTestRunner

表示需要測試的執行緒,相當與一個ExecuteService,可以用來執行TestRunnable,建構函式需要傳入TestRunnable陣列。

呼叫MultiThreadedTestRunner.runTestRunnables()方法啟動測試執行緒,開始執行測試。

TestMonitorRunnable

表示監控執行緒,可以讓每一個TestRunnable對應一個TestMonitorRunnable,在TestMonitorRunnable中監控TestRunnable,TestMonitorRunnable是TestRunnable的子類。

總結

GroboUtils使得擴充套件Java測試變得可能,常常被用於多執行緒測試,整體單元測試,程式碼覆蓋工具。

相關推薦

怎麼使用Junit進行執行測試

Junit本身是不支援普通的多執行緒測試的,這是因為Junit的底層實現上,是用System.exit退出用例執行的,主執行緒終止jvm都停了,其他執行緒肯定執行不了了(具體分析檢視原始碼org.junit.runner.JUnitCore)。 本文介紹一款第

Junit單元執行測試執行執行

Junit單元測試子執行緒不執行 環境 - Junit:4 - jdk:1.8 1、現象描述 在測試CountDownLatch類時,使用main函式能夠正常執行的功能,改用Junit測試時,Debug除錯時不進入子執行緒執行,直接執行時,有時候能

在本地使用GroboUtils進行執行測試

在本地開發的時候有時候需要用到多執行緒去測試某些類或者方法是否有執行緒安全問題,由於本地開發機器硬體限制通過硬編碼的方式往往難以達到多個執行緒同時訪問的效果,這時可以考慮使用GroboUtils達到目的。順便提一句,使用Junit是不行的,去看原始碼會發現junit是Sys

Junit單元測試不支援執行測試--原因分析和問題解決

問題現象 import org.junit.Test;/** * @Title: junit多執行緒測試 * @ClassName: JunitMultiThreadTest.java *

spring-junit執行測試

使用junit進行單元測試的時候,並不能對多執行緒的操作進行測試。一般情況下是使用main方法來進行測試。但如果專案需要載入大量的配置的情況下,測試類寫起來很複雜,需要去寫載入各種配置檔案的程式碼

【學習筆記】Java-Concurrent-執行測試模板

import java.util.concurrent.CountDownLatch; /** * 多執行緒測試模板 * * @author Mairuis * @date 2018/10/11 */ public class ConcurrentTest { public s

執行測試程式碼

package com.yy.read;import java.util.HashSet;import java.util.List;import java.util.Random;import java.util.Set;import java.util.concurrent.Callable

TestNG執行測試-用xml檔案實現

MultiThreadOnXml類: package com.janson.multiThread; import org.testng.annotations.Test; public class MultiThreadOnXml { @Test public void tes

C++使用thread類進行執行程式設計

C++11中引入了一個用於多執行緒操作的thread類,簡單多執行緒示例: #include <iostream> #include <thread> #include <Windows.h> using namespace std; void thread01(

scala actor 執行測試

package com.Actor import java.io.File import scala.actors.Actor import scala.io.Source /** * author pg * date 2018-12-17 */ //本程式是用scala 原生的a

Java-Concurrent-執行測試模板

import java.util.concurrent.CountDownLatch; /** * 多執行緒測試模板 * * @author Mairuis * @date 2018/10/11 */ public class ConcurrentTest {

Android使用訊號量Semaphore進行執行任務排程

話不多說,先上程式碼 import android.os.Handler; import android.os.Looper; import android.os.Message; import java.util.LinkedList; import java.util

junit作為執行環境的啟動入口

錯誤現象: 我在除錯一個多執行緒環境下的server程式。用junit的測試方法作為啟動,很快程式就退出,而且沒有任何異常資訊。server程式的邏輯是主執行緒啟動多個執行緒池後退出。多個執行緒池的執行緒都不是Daemon執行緒。採用main方法啟動後程序將不會退出。

Springboot專案,執行測試使用Redis生成訂單id

Springboot專案,多執行緒測試使用Redis生成訂單id springboot測試類: import org.junit.After; import org.junit.Before; import org.junit.runner.RunWith; import org

LinkedBlockingQueue執行測試

public class FillQueueThread extends Thread { private Queue queue; public FillQueueThread(Queue queue){ this.queue = queue; } @Over

Java中使用CountDownLatch進行執行同步

CountDownLatch介紹在前面的Java學習筆記中,總結了Java中進行多執行緒同步的幾個方法:1、synchronized關鍵字進行同步。2、Lock鎖介面及其實現類ReentrantLock

52.[Python]使用threading進行執行程式設計

基礎知識 使用Python進行多程序程式設計歡迎參考我的前一篇部落格,本文介紹的threading模組在我的github專案上有對應的原始碼,歡迎閱讀時參考。 程序是資源的擁有者,程序的建立、切換和銷燬代價較高,所以引入了輕量程序——執行緒。 執

使用 C++ 和 MFC 進行執行程式設計

程序是應用程式的執行例項。例如,雙擊“記事本”圖示時,將啟動執行“記事本”的程序。 執行緒是程序內的執行路徑。啟動“記事本”時,作業系統建立程序並開始執行該程序的主執行緒。此執行緒終止時,程序也終止。啟動程式碼以函式地址的形式將此主執行緒提供給作業系統。通常是所提供的main 函式或 WinMain 函式

使用C++11進行執行歸併排序:std::thread

相對於使用pthread來說,c++的標準庫對多執行緒的程式設計封裝的非常好,使用起來有如下幾個優勢: 1:可以直接傳遞引數給函式,而不需要將它封裝到一個結構體再轉換成為void*傳入。 2

使用POSIX Threads進行執行程式設計(一)——pthread基本知識

使用POSIX Threads進行多執行緒程式設計(一) ——pthread基本知識 說明: 本文預計翻譯三章,主要涉及pthread基本知識、互斥量(鎖)和條件變數,一是因為這已經能夠引導讀者入門,二是因為本人在工作之餘翻譯,實在時間捉急。