当前位置:首页>java>以终为始——用TDD划定AI编程的边界

以终为始——用TDD划定AI编程的边界

  • 2026-08-26 22:53:19
以终为始——用TDD划定AI编程的边界

今日核心: 在写第一行代码前,先定义何为"正确"。测试驱动开发(TDD)是我们对抗AI"幻觉"最强大的武器,它将主观需求转化为客观、可执行的验证标准。

1. 痛点解析:为什么AI需要TDD?

模糊的代价:当您要求AI"实现用户登录"时,它可能生成基于会话的方案,而您期望的是JWT。这种歧义会导致后期大量返工。

TDD作为精准的"产品规格书":测试用例是对功能行为最无歧义的描述。先写测试,等于为AI提供了必须遵守的"契约"。

2. 实战:编写第一个认证测试用例

以下示例定义了用户注册的成功与失败场景,明确约束了后续AI实现必须满足的边界。

// tests/auth.test.js

import { describe, it, expect } from 'vitest';

describe('用户认证模块', () => {

  describe('注册流程', () => {

    it('应使用邮箱和密码成功注册新用户', async () => {

      const userData = {

        email: 'test@example.com',

        password: 'securePassword123!'

      };

      // 期待AI实现的API返回成功状态和用户基本信息,且不含密码

      const response = await registerUser(userData);

      expect(response.status).toBe(201);

      expect(response.user).toHaveProperty('id');

      expect(response.user.email).toBe(userData.email);

      expect(response.user).not.toHaveProperty('password'); // 安全要求

    });

    it('应拒绝重复邮箱的注册请求', async () => {

      const userData = { email: 'duplicate@example.com', password: 'password' };

      // 首次注册应成功

      await registerUser(userData);

      // 第二次注册应失败

      const secondResponse = await registerUser(userData);

      expect(secondResponse.status).toBe(400);

      expect(secondResponse.error).toContain('已存在');

    });

  });

});

3. AI协作提示词示例

"根据以上Jest/Vitest测试用例,使用BetterAuth库实现一个  registerUser  函数。该函数应接收用户对象,调用BetterAuth的API,并返回符合测试期望的结果。请特别注意错误处理,确保重复邮箱时返回的状态码和错误信息与测试用例完全匹配。"

今日成果: 建立核心功能的测试套件,为AI编程设定不可违背的"法律条文"。

最新文章

随机文章