首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Linux 下以 Shell 腳本執行 Java 單元測試:從入門到自動化整合

     編輯:程式設計綜合問答

導師要求:在 Linux 命令列執行 Java 單元測試類/方法。本文提供從手動 java -cp 到 Maven/Gradle 整合、再到 CI/CD 自動化的完整演進路徑。

基礎:手動編譯執行

# 1. 編譯主程式與測試碼
javac -d out -cp lib/junit-4.13.2.jar:lib/hamcrest-core-1.3.jar src/main/java/com/example/*.java src/test/java/com/example/*Test.java

# 2. 執行單一測試類 (JUnit 4)
java -cp out:lib/junit-4.13.2.jar:lib/hamcrest-core-1.3.jar org.junit.runner.JUnitCore com.example.MyClassTest

# 3. 執行單一方法
java -cp out:lib/junit-4.13.2.jar:lib/hamcrest-core-1.3.jar org.junit.runner.JUnitCore com.example.MyClassTest#testMethodName

進階:封裝為可執行測試執行器

自訂 TestExecutor (含 main) 解耦測試發現與執行邏輯:

// TestExecutor.java
public class TestExecutor {
    public static void main(String[] args) {
        // args[0] = 測試類全名, args[1] = 可選方法名
        Request request = args.length > 1 
            ? Request.method(Class.forName(args[0]), args[1])
            : Request.aClass(Class.forName(args[0]));
        new JUnitCore().run(request);
    }
}

打包:jar cvfe TestExecutor.jar TestExecutor TestExecutor.class

Shell 呼叫:java -cp TestExecutor.jar:target/classes:lib/* TestExecutor com.example.MyClassTest testMethodName

標準化:Maven / Gradle 一鍵測試

建構工具命令輸出報告
Mavenmvn test
mvn test -Dtest=MyClassTest#testMethod
target/surefire-reports/
Gradlegradle test
gradle test --tests com.example.MyClassTest.testMethod
build/reports/tests/test/index.html

Shell 腳本範例:run_tests.sh

#!/bin/bash
set -e
PROJECT_DIR="/opt/myapp"
cd "$PROJECT_DIR"

# 選項解析
TEST_CLASS="${1:-}"
TEST_METHOD="${2:-}"

if [ -n "$TEST_CLASS" ]; then
    mvn test -Dtest="${TEST_CLASS}${TEST_METHOD:+#$TEST_METHOD}"
else
    mvn test
fi

使用:./run_tests.sh com.example.UserServiceTest testLogin

CI/CD 整合

  • Jenkins:sh 'mvn test' 在 Pipeline 階段。
  • GitLab CI:script: - mvn test 在 .gitlab-ci.yml。
  • GitHub Actions:run: mvn test。

關鍵原理總結

「java 命令只能執行含 main 方法的類。即使使用 Maven/Surefire,其入口本質仍是一個啟動類(如 JUnitCore 或 JUnitPlatform)透過反射發現並執行測試方法。」

避坑指南

  • Classpath 分隔符:Linux 用 :,Windows 用 ;。
  • 測試資源檔:放在 src/test/resources,Maven 自動複製到 target/test-classes。
  • 並行執行:Maven Surefire <parallel>classes</parallel>、JUnit 5 @Execution(CONCURRENT)。
  • JUnit 5 需 junit-platform-launcher,命令列不同:java -jar junit-platform-console-standalone.jar -c com.example.TestClass。

從手動 java -cp 理解本質,再轉向建構工具標準化流程,是 Java 開發者邁向自動化測試的必經之路。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved