# est-spi-tck **Repository Path**: est-spi/tck ## Basic Information - **Project Name**: est-spi-tck - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-15 - **Last Updated**: 2026-03-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # EST SPI TCK [English Version](README.en.md) ## EST SPI 技术兼容性测试套件 est-spi-tck 是 EST SPI 框架的技术兼容性测试套件(Technology Compatibility Kit),提供契约测试、兼容性测试和性能基准测试功能。 ### 核心功能 #### TestStatus - 测试状态枚举 定义测试执行的状态: - NOT_RUN - 未运行 - PASSED - 通过 - FAILED - 失败 - ERROR - 错误 - SKIPPED - 跳过 #### TckException - TCK异常 TCK操作的异常类是? #### TestResult - 测试结果 单个测试的执行结果,包括: - testId - 测试ID - testName - 测试名称 - moduleName - 模块名称 - status - 测试状态 - startTime/endTime - 开是?结束时间 - duration - 执行时长 - message - 结果消息 - error - 错误信息 - start() - 开始测试 - pass() - 测试通过 - fail() - 测试失败 - error() - 测试错误 - skip() - 跳过测试 #### ContractTest - 契约测试接口 契约测试的标准接口: - getTestId() - 获取测试ID - getTestName() - 获取测试名称 - getModuleName() - 获取模块名称 - execute() - 执行测试 #### TckTestSuite - TCK测试套件 TCK测试套件,用于组织和执行多个契约测试。 - addTest() - 添加测试 - removeTest() - 移除测试 - getTests() - 获取所有测试 - execute() - 执行所有测试 - getResults() - 获取测试结果 - getTotalTests() - 获取总测试数 - getPassedTests() - 获取通过测试数 - getFailedTests() - 获取失败测试数 - getErrorTests() - 获取错误测试数 - getSkippedTests() - 获取跳过测试数 - isAllPassed() - 检查是否全部通过 - clear() - 清空测试套件 #### BenchmarkResult - 性能基准结果 性能基准测试的结果,包括: - benchmarkId - 基准测试ID - benchmarkName - 基准测试名称 - moduleName - 模块名称 - startTime/endTime - 开是?结束时间 - iterations - 迭代次数 - throughput - 吞吐量 - averageTime - 平均执行时间 - minTime - 最小执行时间 - maxTime - 最大执行时间 #### BenchmarkRunner - 性能基准运行器 性能基准测试的运行器。 - Benchmark接口 - 性能基准接口 - addBenchmark() - 添加基准测试 - removeBenchmark() - 移除基准测试 - getBenchmarks() - 获取所有基准测试 - run() - 执行所有基准测试 - getResults() - 获取基准测试结果 - setWarmupIterations() - 设置预热迭代次数 - setMeasurementIterations() - 设置测量迭代次数 - clear() - 清空基准测试 #### ReportGenerator - 报告生成器 测试报告生成器,支持: - generateTextReport() - 生成文本报告 - generateHtmlReport() - 生成HTML报告 - generateBenchmarkReport() - 生成基准测试报告 ### 快速开始 #### 创建和执行简单的测试 ```java import ltd.idcu.est.spi.tck.*; public class Example { public static void main(String[] args) { TckTestSuite suite = new TckTestSuite("My Test Suite"); ContractTest test1 = new ContractTest() { @Override public String getTestId() { return "test-001"; } @Override public String getTestName() { return "Simple Test"; } @Override public String getModuleName() { return "module-example"; } @Override public TestResult execute() { TestResult result = new TestResult(getTestId(), getTestName(), getModuleName()); result.start(); try { int value = 2 + 2; if (value == 4) { result.pass("Calculation correct"); } else { result.fail("Calculation wrong"); } } catch (Exception e) { result.error(e); } return result; } }; suite.addTest(test1); System.out.println("Executing tests..."); suite.execute(); System.out.println("\nResults:"); System.out.println("Total: " + suite.getTotalTests()); System.out.println("Passed: " + suite.getPassedTests()); System.out.println("Failed: " + suite.getFailedTests()); System.out.println("All passed: " + suite.isAllPassed()); } } ``` #### 创建测试套件并执行多个测试 ```java import ltd.idcu.est.spi.tck.*; public class Example { public static void main(String[] args) { TckTestSuite suite = new TckTestSuite("Comprehensive Test Suite"); suite.addTest(createPassingTest("test-001", "Test 1", "module-a")); suite.addTest(createPassingTest("test-002", "Test 2", "module-a")); suite.addTest(createFailingTest("test-003", "Test 3", "module-b")); suite.addTest(createErrorTest("test-004", "Test 4", "module-b")); System.out.println("Test count: " + suite.getTotalTests()); suite.execute(); System.out.println("\nSummary:"); System.out.println("Passed: " + suite.getPassedTests()); System.out.println("Failed: " + suite.getFailedTests()); System.out.println("Errors: " + suite.getErrorTests()); System.out.println("All passed: " + suite.isAllPassed()); System.out.println("\nDetailed results:"); for (TestResult result : suite.getResults()) { System.out.println("[" + result.getModuleName() + "] " + result.getTestName() + " - " + result.getStatus() + " (" + result.getDuration() + "ms)"); } } private static ContractTest createPassingTest(String id, String name, String module) { return new ContractTest() { @Override public String getTestId() { return id; } @Override public String getTestName() { return name; } @Override public String getModuleName() { return module; } @Override public TestResult execute() { TestResult result = new TestResult(id, name, module); result.start(); result.pass(); return result; } }; } private static ContractTest createFailingTest(String id, String name, String module) { return new ContractTest() { @Override public String getTestId() { return id; } @Override public String getTestName() { return name; } @Override public String getModuleName() { return module; } @Override public TestResult execute() { TestResult result = new TestResult(id, name, module); result.start(); result.fail("Failed intentionally"); return result; } }; } private static ContractTest createErrorTest(String id, String name, String module) { return new ContractTest() { @Override public String getTestId() { return id; } @Override public String getTestName() { return name; } @Override public String getModuleName() { return module; } @Override public TestResult execute() { TestResult result = new TestResult(id, name, module); result.start(); result.error(new RuntimeException("Error intentionally")); return result; } }; } } ``` #### 运行性能基准测试 ```java import ltd.idcu.est.spi.tck.*; public class Example { public static void main(String[] args) { BenchmarkRunner runner = new BenchmarkRunner("Performance Benchmarks"); runner.setWarmupIterations(1000); runner.setMeasurementIterations(10000); BenchmarkRunner.Benchmark bench1 = new BenchmarkRunner.Benchmark() { private int counter; @Override public String getBenchmarkId() { return "bench-loop"; } @Override public String getBenchmarkName() { return "Loop Benchmark"; } @Override public String getModuleName() { return "module-performance"; } @Override public void setup() { counter = 0; } @Override public void run() { for (int i = 0; i < 100; i++) { counter++; } } @Override public void teardown() { } }; runner.addBenchmark(bench1); System.out.println("Running benchmarks..."); runner.run(); System.out.println("\nBenchmark results:"); for (BenchmarkResult result : runner.getResults()) { System.out.println("\n[" + result.getModuleName() + "] " + result.getBenchmarkName()); System.out.println(" Iterations: " + result.getIterations()); System.out.println(" Throughput: " + String.format("%.2f", result.getThroughput()) + " ops/s"); System.out.println(" Avg time: " + String.format("%.4f", result.getAverageTime()) + "ms"); System.out.println(" Min time: " + String.format("%.4f", result.getMinTime()) + "ms"); System.out.println(" Max time: " + String.format("%.4f", result.getMaxTime()) + "ms"); } } } ``` #### 生成测试报告 ```java import ltd.idcu.est.spi.tck.*; public class Example { public static void main(String[] args) { TckTestSuite suite = new TckTestSuite("Report Test Suite"); suite.addTest(createPassingTest("test-001", "Test 1", "module-a")); suite.addTest(createPassingTest("test-002", "Test 2", "module-a")); suite.addTest(createFailingTest("test-003", "Test 3", "module-b")); suite.execute(); String textReport = ReportGenerator.generateTextReport(suite); System.out.println("=== Text Report ==="); System.out.println(textReport); String htmlReport = ReportGenerator.generateHtmlReport(suite); System.out.println("\n=== HTML Report ==="); System.out.println("HTML report generated (length: " + htmlReport.length() + ")"); BenchmarkRunner runner = new BenchmarkRunner("Benchmark Report Test"); runner.setWarmupIterations(100); runner.setMeasurementIterations(1000); runner.addBenchmark(createSimpleBenchmark()); runner.run(); String benchReport = ReportGenerator.generateBenchmarkReport(runner); System.out.println("\n=== Benchmark Report ==="); System.out.println(benchReport); } private static ContractTest createPassingTest(String id, String name, String module) { return new ContractTest() { @Override public String getTestId() { return id; } @Override public String getTestName() { return name; } @Override public String getModuleName() { return module; } @Override public TestResult execute() { TestResult result = new TestResult(id, name, module); result.start(); result.pass(); return result; } }; } private static ContractTest createFailingTest(String id, String name, String module) { return new ContractTest() { @Override public String getTestId() { return id; } @Override public String getTestName() { return name; } @Override public String getModuleName() { return module; } @Override public TestResult execute() { TestResult result = new TestResult(id, name, module); result.start(); result.fail("Failed"); return result; } }; } private static BenchmarkRunner.Benchmark createSimpleBenchmark() { return new BenchmarkRunner.Benchmark() { private int counter; @Override public String getBenchmarkId() { return "bench-simple"; } @Override public String getBenchmarkName() { return "Simple Benchmark"; } @Override public String getModuleName() { return "module-bench"; } @Override public void setup() { counter = 0; } @Override public void run() { counter++; } @Override public void teardown() {} }; } } ``` #### 完整示例 ```java import ltd.idcu.est.spi.tck.*; public class CompleteExample { public static void main(String[] args) { System.out.println("=== EST SPI TCK Example ==="); System.out.println("\n--- 1. Test Suite ---"); TckTestSuite suite = new TckTestSuite("EST SPI TCK Test Suite"); suite.addTest(new ContractTest() { @Override public String getTestId() { return "tck-core-001"; } @Override public String getTestName() { return "Core Functionality Test"; } @Override public String getModuleName() { return "est-spi-core"; } @Override public TestResult execute() { TestResult result = new TestResult(getTestId(), getTestName(), getModuleName()); result.start(); result.pass("Core functionality working correctly"); return result; } }); suite.addTest(new ContractTest() { @Override public String getTestId() { return "tck-lang-001"; } @Override public String getTestName() { return "Lang Utilities Test"; } @Override public String getModuleName() { return "est-spi-lang"; } @Override public TestResult execute() { TestResult result = new TestResult(getTestId(), getTestName(), getModuleName()); result.start(); result.pass("Lang utilities working correctly"); return result; } }); System.out.println("Running contract tests..."); suite.execute(); System.out.println("\n--- 2. Benchmarks ---"); BenchmarkRunner runner = new BenchmarkRunner("EST SPI Performance Benchmarks"); runner.setWarmupIterations(100); runner.setMeasurementIterations(1000); runner.addBenchmark(new BenchmarkRunner.Benchmark() { private long sum; @Override public String getBenchmarkId() { return "bench-calculation"; } @Override public String getBenchmarkName() { return "Calculation Benchmark"; } @Override public String getModuleName() { return "est-spi-core"; } @Override public void setup() { sum = 0; } @Override public void run() { for (int i = 0; i < 100; i++) { sum += i; } } @Override public void teardown() {} }); System.out.println("Running benchmarks..."); runner.run(); System.out.println("\n--- 3. Reports ---"); System.out.println("\n=== Text Report ==="); System.out.println(ReportGenerator.generateTextReport(suite)); System.out.println("\n=== Benchmark Report ==="); System.out.println(ReportGenerator.generateBenchmarkReport(runner)); System.out.println("\n--- Summary ---"); System.out.println("Contract tests passed: " + suite.isAllPassed()); System.out.println("Benchmarks completed: " + runner.getResults().size()); } } ``` ### Maven 依赖 ```xml ltd.idcu.est.spi est-spi-tck 1.0.0 ``` ### 许可证 MIT License