Files
novalon-manage-system/docs/plans/2026-03-30-tdd-improvement-plan.md
T
张翔 648851df92 docs: 添加测试报告和计划文档
- 添加E2E测试报告
- 添加UAT测试报告
- 添加测试计划文档
- 添加测试改进总结
2026-04-15 23:38:15 +08:00

9.3 KiB
Raw Blame History

Novalon管理系统TDD改进方案实施计划

For Claude: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.

Goal: 通过测试驱动开发(TDD)方法全面提升Novalon管理系统的测试覆盖率、代码质量和系统可靠性

Architecture: 采用三阶段迭代改进方案,从基础设施修复到核心业务重构,再到前端优化,确保每个阶段都遵循"编写测试→实现功能→重构优化"的TDD流程

Tech Stack: Spring Boot 3.5.13, Vue 3, JUnit 5, Vitest, Playwright, pytest, PostgreSQL


项目现状分析

当前测试覆盖率

  • API集成测试: 26%覆盖率,存在编译错误
  • 后端单元测试: 837个测试用例,18个测试失败
  • 前端单元测试: 32个测试文件配置错误
  • E2E测试: Playwright配置问题导致无法运行

关键问题

  1. Java测试代码构造器参数不匹配
  2. Mock配置错误和依赖注入问题
  3. 异步测试断言不准确
  4. 前端测试环境配置错误

迭代计划概览

迭代周期1:基础设施修复与TDD流程建立(已完成)

  • 修复Java测试代码构造器参数问题
  • 🔄 建立TDD工作流规范

迭代周期2:核心业务逻辑TDD重构

  • 修复用户管理模块测试失败
  • 实现权限管理模块TDD开发
  • 提升API测试覆盖率至80%

迭代周期3:前端组件TDD优化

  • 修复前端测试配置问题
  • 实现Vue组件TDD开发模式
  • 完善E2E测试覆盖

详细实施任务

任务1:修复后端测试失败用例

文件:

  • Modify: novalon-manage-api/manage-sys/src/test/java/cn/novalon/manage/sys/handler/auth/SysAuthHandlerTest.java
  • Modify: novalon-manage-api/manage-sys/src/test/java/cn/novalon/manage/sys/core/service/impl/SysUserServiceTest.java
  • Modify: novalon-manage-api/manage-sys/src/test/java/cn/novalon/manage/sys/interceptor/OperationLogFilterTest.java

步骤1:分析SysAuthHandlerTest测试失败原因

// 检查第84行测试失败原因
@Test
void testLogin_Success() {
    // 分析expectNextMatches失败的具体原因
}

步骤2:修复Mock配置问题

// 确保所有Mock对象正确配置
@Mock
private PasswordEncoder passwordEncoder;

@BeforeEach
void setUp() {
    when(passwordEncoder.matches(anyString(), anyString())).thenReturn(true);
}

步骤3:修复异步测试断言

// 使用正确的响应式测试模式
StepVerifier.create(result)
    .expectNextMatches(response -> {
        // 精确的断言逻辑
        return response.statusCode().is2xxSuccessful();
    })
    .verifyComplete();

步骤4:运行修复后的测试

cd /Users/zhangxiang/Codes/Novalon/novalon-manage-system/novalon-manage-api/manage-sys
mvn test -Dtest=SysAuthHandlerTest

预期结果: 所有SysAuthHandlerTest测试通过

任务2:修复前端测试配置

文件:

  • Modify: novalon-manage-web/playwright.config.ts
  • Modify: novalon-manage-web/e2e/*.spec.ts
  • Create: novalon-manage-web/vitest.config.ts

步骤1:修复Playwright配置

// playwright.config.ts
import { defineConfig, devices } from '@playwright/test';

export default defineConfig({
  testDir: './e2e',
  fullyParallel: true,
  forbidOnly: !!process.env.CI,
  retries: process.env.CI ? 2 : 0,
  workers: process.env.CI ? 1 : undefined,
  reporter: 'html',
  use: {
    baseURL: 'http://localhost:5173',
    trace: 'on-first-retry',
  },
  projects: [
    {
      name: 'chromium',
      use: { ...devices['Desktop Chrome'] },
    },
  ],
  webServer: {
    command: 'npm run dev',
    url: 'http://localhost:5173',
    reuseExistingServer: !process.env.CI,
  },
});

步骤2:修复E2E测试文件

// e2e/basic.spec.ts
import { test, expect } from '@playwright/test';

test('basic test', async ({ page }) => {
  await page.goto('/');
  await expect(page).toHaveTitle(/Novalon/);
});

步骤3:配置Vitest测试环境

// vitest.config.ts
import { defineConfig } from 'vitest/config';
import vue from '@vitejs/plugin-vue';

export default defineConfig({
  plugins: [vue()],
  test: {
    environment: 'jsdom',
    globals: true,
  },
});

步骤4:运行前端测试

cd /Users/zhangxiang/Codes/Novalon/novalon-manage-system/novalon-manage-web
npm run test:unit
npm run test:e2e

预期结果: 前端测试能够正常运行

任务3:实现用户管理模块TDD开发

文件:

  • Create: novalon-manage-api/manage-sys/src/test/java/cn/novalon/manage/sys/core/service/impl/UserServiceTDDTest.java
  • Modify: novalon-manage-api/manage-sys/src/main/java/cn/novalon/manage/sys/core/service/impl/SysUserServiceImpl.java

步骤1:编写用户创建功能失败测试

@Test
void testCreateUser_WithInvalidEmail_ShouldFail() {
    CreateUserCommand command = new CreateUserCommand(
        "testuser", 
        "password123", 
        "invalid-email", 
        "Test User"
    );
    
    assertThrows(ValidationException.class, () -> {
        userService.createUser(command);
    });
}

步骤2:运行测试确认失败

mvn test -Dtest=UserServiceTDDTest::testCreateUser_WithInvalidEmail_ShouldFail

步骤3:实现最小验证逻辑

public Mono<SysUser> createUser(CreateUserCommand command) {
    // 添加邮箱格式验证
    if (!isValidEmail(command.getEmail())) {
        return Mono.error(new ValidationException("Invalid email format"));
    }
    
    // 原有业务逻辑
    return userRepository.save(user);
}

private boolean isValidEmail(String email) {
    return email.matches("^[A-Za-z0-9+_.-]+@(.+)$");
}

步骤4:运行测试确认通过

mvn test -Dtest=UserServiceTDDTest::testCreateUser_WithInvalidEmail_ShouldFail

步骤5:提交代码

git add novalon-manage-api/manage-sys/src/test/java/cn/novalon/manage/sys/core/service/impl/UserServiceTDDTest.java
 git add novalon-manage-api/manage-sys/src/main/java/cn/novalon/manage/sys/core/service/impl/SysUserServiceImpl.java
 git commit -m "feat: add email validation with TDD approach"

任务4:建立测试覆盖率监控

文件:

  • Create: novalon-manage-system/.woodpecker/quality-gates.yml
  • Modify: novalon-manage-api/pom.xml
  • Modify: novalon-manage-web/package.json

步骤1:配置JaCoCo测试覆盖率

<!-- pom.xml -->
<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.11</version>
    <executions>
        <execution>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
        <execution>
            <id>report</id>
            <phase>test</phase>
            <goals>
                <goal>report</goal>
            </goals>
        </execution>
    </executions>
</plugin>

步骤2:配置质量门禁规则

# .woodpecker/quality-gates.yml
steps:
  - name: test-coverage-check
    image: maven:3.9-openjdk-21
    commands:
      - mvn clean test jacoco:report
      - |
        COVERAGE=$(cat target/site/jacoco/index.html | grep -oP 'Total.*?\K[0-9]+%' | head -1 | sed 's/%//')
        if [ $COVERAGE -lt 80 ]; then
          echo "Test coverage $COVERAGE% is below required 80%"
          exit 1
        fi

步骤3:配置前端测试覆盖率

// package.json
{
  "scripts": {
    "test:coverage": "vitest run --coverage",
    "test:e2e:coverage": "playwright test --reporter=html"
  }
}

任务5:建立TDD工作流规范

文件:

  • Create: novalon-manage-system/docs/tdd-workflow.md
  • Create: novalon-manage-system/.github/workflows/tdd-pipeline.yml

步骤1:创建TDD工作流文档

# TDD工作流规范

## 开发流程
1. 编写失败测试用例(Red
2. 实现最小功能使测试通过(Green)
3. 重构优化代码质量(Refactor)
4. 提交代码并运行完整测试套件

## 质量门禁
- 单元测试覆盖率 ≥ 80%
- 集成测试覆盖率 ≥ 70%
- 零编译错误,测试通过率100%

步骤2:配置GitHub Actions TDD流水线

name: TDD Pipeline
on: [push, pull_request]

jobs:
  tdd-validation:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Setup Java
        uses: actions/setup-java@v3
        with:
          java-version: '21'
          distribution: 'temurin'
      - name: Run TDD Tests
        run: |
          mvn clean test
          npm run test:coverage
          npm run test:e2e

验收标准

质量指标

  • 后端单元测试覆盖率 ≥ 80%
  • 前端单元测试覆盖率 ≥ 70%
  • E2E测试关键路径覆盖率100%
  • 零编译错误,测试通过率100%

流程指标

  • TDD工作流规范文档完善
  • 质量门禁机制正常运行
  • 持续集成流水线稳定运行

风险与缓解措施

技术风险

  1. 异步测试复杂性 - 采用StepVerifier等专业工具
  2. 前端测试环境配置 - 使用容器化测试环境
  3. 测试数据管理 - 建立测试数据工厂模式

流程风险

  1. 团队TDD接受度 - 提供培训和最佳实践示例
  2. 测试维护成本 - 建立测试代码审查机制
  3. 性能影响 - 优化测试执行策略

计划制定完成时间: 2026-03-30 预计实施周期: 2-3周 负责人: 张翔(全栈质量保障与效能工程师)