生成单元测试

watsonx Code Assistant

通过聊天、编辑器中的 CodeLens 或资源管理器生成各种编程语言的单元测试。

下表列出了每个计划的单元测试类型。

单元测试类型
套餐 单元测试 描述
试用计划 基本计划 基本 使用生成式人工智能进行基本单元测试。 无需进行额外的代码分析。
标准套餐 增强 需要内置应用程序,并使用代码分析和生成人工智能为 Java 方法和类提供增强单元测试。

仅Eclipse IDE:为了在多Java中获得最佳效果,请确保将聚合器模块和每个子模块作为单独的项目导Eclipse。如果您将顶层目录作为单个项目导入,Watsonx Code Assistant 不太可能成功检查您的项目。

语言支持

测试生成可用于以下语言

  • C
  • C++
  • 执行
  • Java
  • JavaScript
  • Python
  • TypeScript

当您引用方法或在方法上使用 CodeLens 时,watsonx Code Assistant 支持某些代码语言。 引用完整文件适用于所有语言。 更多信息,请参阅 使用方法时的语言支持

依赖关系

标准计划对于Java,请确保 "pom.xml 文件包含以下依赖项:

  • JUnit——至少需要JUnit 5
  • Mockito- 至少需要Java9 版本

下面的示例 "pom.xml 文件显示了依赖关系和示例版本。 在文件中包含您正在使用的依赖项和版本。

   <dependencies>
      <dependency>
         <groupId>org.junit.jupiter</groupId>
         <artifactId>junit-jupiter-api</artifactId>
         <version>5.10.0</version>
         <scope>test</scope>
      </dependency>
      <dependency>
         <groupId>org.mockito</groupId>
         <artifactId>mockito-core</artifactId>
         <version>5.12.0</version>
         <scope>test</scope>
      </dependency>
      <dependency>
         <groupId>org.mockito</groupId>
         <artifactId>mockito-junit-jupiter</artifactId>
         <version>5.12.0</version>
         <scope>test</scope>
      </dependency>
   </dependencies>

使用聊天命令生成单元测试

您可以在聊天中使用 "/unit-test 命令,为活动工作区中的引用类、文件、函数或方法生成测试。

使用以下语法:

/unit-test [using <test_framework>] <code reference> [similar to (<unit test reference>)] [additional instructions]

  • 确保以 /unit-test 开头,然后是其余语法。

  • [using <test_framework>] 是可选的。 如果您没有指定框架,watsonx Code Assistant 将使用您设置中的测试框架。

  • 对于“<code reference>,键入”@ 符号可查看工作区中的类、文件、函数和方法列表。 一次只使用一个类、文件、函数或方法引用。

    引用文件时,大小限制为 50 KB。 如果达到此限制,请将文件分割成单个函数,并引用每个函数。 或者,将文件分割为 49 KB,注意函数边界,并在每次分割时引用文件。 无论采用哪种方法,都需要合并结果。

  • [similar to (<unit test reference>)] 是可选的。 用于举例说明生成的单元测试的预期外观。 如有需要,您可以在 similar to 选项中使用方法引用。

  • [additional instructions] 为可选项。 如果需要具体细节,请添加说明。

接下来,watsonx Code Assistant会处理请求,并在聊天中显示为所选代码生成的单元测试。

  • Essentials plan将单元测试复制到为应用程序提供单元测试的文件中。

  • 标准计划 将单元测试复制到高层目录结构中的一个文件 src/test/java。 例如,将单元测试文件复制到 ".../src/test/java/com/acme/modres/WCA_OrdersAlertFilter_Test.java

在编辑器中使用CodeLens生成单元测试

在集成开发环境编辑器中,CodeLens会在代码块和代码段之前显示一行生成式人工智能选项。

已知问题如果使用watsonx Code Assistant for Enterprise Java Applications扩展,启动后可能需要几秒钟才能从CodeLens 获取增强的Java功能。

  1. 单击代码块前面的 “单元测试” 选项以生成单元测试。

    在下面的代码示例中,“Explain | Document | Unit Test 选项紧接着”protected void 关键字。

    CodeLens 示例
    CodeLens示例

    watsonx Code Assistant聊天窗口打开,显示 "/unit-test @<*item name*> 命令,运行命令并显示单元测试。

  2. Essentials plan将单元测试复制到为应用程序提供单元测试的文件中。

  3. 标准计划 将单元测试复制到高层目录结构中的一个文件 src/test/java。 例如,将单元测试文件复制到 ".../src/test/java/com/acme/modres/WCA_OrdersAlertFilter_Test.java

禁用 CodeLens

如果要禁用 CodeLens 选项,可以更改扩展或插件的设置。

在 Visual Studio Code:

  1. 打开扩展设置。

  2. 清除 Enable CodeLens 设置。

在 Eclipse:

  1. 打开 Eclipse IDE 的设置。

  2. watsonx Code Assistant 设置条目中,清除 Enable CodeLens 环境。

  3. 单击“应用”并关闭

使用资源管理器生成单元测试

从资源管理器 ( Visual Studio Code ) 或项目资源管理器 ( Eclipse ) 生成单元测试:

  1. 将应用程序扩展到要生成单元测试的代码。

  2. 右键单击代码,单击 watsonx Code Assistant,然后单击单元测试

  3. watsonx Code Assistant聊天会显示您选择用于单元测试的代码的 "/unit-test 命令。 该命令使用以下语法:

    /unit-test @<*item syntax*>

    以下语法示例分别针对文件、类和方法。

    • 文件:"/unit-test @OrdersAlertFilter.java
    • 类: /unit-test @OrdersAlertFilter
    • 方法:/unit-test @DoFilter()

    Watsonx Code Assistant会处理请求,并在聊天中显示为所选代码生成的单元测试。

  4. Essentials plan将单元测试复制到为应用程序提供单元测试的文件中。

  5. 标准计划 将单元测试复制到高层目录结构中的一个文件 src/test/java。 例如,将单元测试文件复制到 ".../src/test/java/com/acme/modres/WCA_OrdersAlertFilter_Test.java

修复单元测试

标准计划 您可以为 watsonx Code Assistant 生成的测试启动单元测试修复。 修复单元测试仅适用于 watsonx Code Assistant for Enterprise Java Applications Visual Studio Code 扩展或 Eclipse 插件(版本 1.1.0 及更高版本)。

如果将 watsonx Code Assistant 作为 IBM Software Hub 的服务在企业内部使用,则需要 5.2 或更高版本。

要求

  • 修复单元测试功能适用于 watsonx Code Assistant 生成的以 WCA_ 开头的测试。 不要删除生成测试中的 WCA_ 前缀。
  • 单元测试需要存储在 Java 项目或应用程序的 src/test/java 文件夹中。

修复单元测试:

  1. 打开资源管理器视图。

  2. 在测试文件夹中,右键单击现有测试文件,单击 watsonx Code Assistant,然后单击修复单元测试

    该过程分为两个阶段:

    • 编译修复阶段:用干净的编译代码更新编辑器中的文件
    • 运行时修复阶段:检查单元测试是否存在运行时错误

    如果在运行过程中出现故障,代码将被注释掉。 例如,如果编译错误被修复,但生成的代码却出现运行时错误。

  3. 这两个阶段完成后,单元测试文件就会更新并可以运行。

请记住下列事项:

  • 如果在生成的测试用例中缺少带有完整限定类名或完整限定方法的引用,单元测试修复将被取消。
  • 要修复单元测试,您的应用程序必须是 Java 版本 9 或更高版本。
  • 在修复单元测试之前,必须对应用程序进行分析。
  • 测试生成有时会生成不必要的导入类、接口或包。 如果导入会导致编译或运行时错误,可以将其注释掉。