当前位置: 首页 > 知识库问答 >
问题:

kapt生成的文件包含错误,并阻止从IntelliJ调试单元测试

孟英锐
2023-03-14

我有一个项目,我正在尝试单元测试。

测试运行良好。为简洁起见,以下代码是虚拟测试:

enum class QueryFilterOperator(val operator: String) {
    EQUAL("="),
    GREATER_THAN(">"),
    LOWER_THAN("<"),
    GREATER_THAN_OR_EQUAL(">="),
    LOWER_THAN_OR_EQUAL("<=");
}

class QueryFilterOperatorTest : StringSpec({
    "a query filter operator" {
        assertEquals("=", EQUAL.operator)
    }
})

但是当尝试使用IntelliJ工具调试它时,在一些kapt生成的代码上编译失败:

package com.wizy.data.contracts;

import java.lang.System;

@kotlin.Metadata(mv = {1, 1, 16}, bv = {1, 0, 3}, k = 1, d1 = {"\u0000\u0012\n\u0002\u0018\u0002\n\u0002\u0010\u0010\n\u0000\n\u0002\u0010\u000e\n\u0002\b\t\b\u0086\u0001\u0018\u00002\b\u0012\u0004\u0012\u00020\u00000\u0001B\u000f\b\u0002\u0012\u0006\u0010\u0002\u001a\u00020\u0003\u00a2\u0006\u0002\u0010\u0004R\u0011\u0010\u0002\u001a\u00020\u0003\u00a2\u0006\b\n\u0000\u001a\u0004\b\u0005\u0010\u0006j\u0002\b\u0007j\u0002\b\bj\u0002\b\tj\u0002\b\nj\u0002\b\u000b\u00a8\u0006\f"}, d2 = {"Lcom/wizy/data/contracts/QueryFilterOperator;", "", "operator", "", "(Ljava/lang/String;ILjava/lang/String;)V", "getOperator", "()Ljava/lang/String;", "EQUAL", "GREATER_THAN", "LOWER_THAN", "GREATER_THAN_OR_EQUAL", "LOWER_THAN_OR_EQUAL", "data-contracts"})
public enum QueryFilterOperator {
    /*public static final*/ EQUAL /* = new EQUAL(null) */,
    /*public static final*/ GREATER_THAN /* = new GREATER_THAN(null) */,
    /*public static final*/ LOWER_THAN /* = new LOWER_THAN(null) */,
    /*public static final*/ GREATER_THAN_OR_EQUAL /* = new GREATER_THAN_OR_EQUAL(null) */,
    /*public static final*/ LOWER_THAN_OR_EQUAL /* = new LOWER_THAN_OR_EQUAL(null) */;
    @org.jetbrains.annotations.NotNull()
    private final java.lang.String operator = null;

    @org.jetbrains.annotations.NotNull()
    public final java.lang.String getOperator() {
        return null;
    }

    QueryFilterOperator(java.lang.String operator) {
    }
}

在此代码中,我们可以看到枚举构造函数设置不正确。

如果我删除构造函数并重试(使用公认的更简单的测试),我可以按预期进行调试。

enum class QueryFilterOperator {
    EQUAL,
    GREATER_THAN,
    LOWER_THAN,
    GREATER_THAN_OR_EQUAL,
    LOWER_THAN_OR_EQUAL;
}

class QueryFilterOperatorTest : StringSpec({
    "a query filter operator" {
        assertNotEquals(EQUAL, GREATER_THAN)
    }
})

为什么kapt会这样表现?为什么它只在调试时抱怨?为什么它甚至会生成这个明显不正确的java代码?

以下是POM中的kapt配置:

<plugin>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-maven-plugin</artifactId>
    <version>1.3.61</version>
    <executions>
        <execution>
            <id>kapt</id>
            <goals>
                <goal>kapt</goal>
            </goals>
            <configuration>
                <sourceDirs>
                    <sourceDir>src/main/java</sourceDir>
                </sourceDirs>
                <annotationProcessorPaths/>
            </configuration>
        </execution>
        <execution>
            <id>compile</id>
            <phase>process-sources</phase>
            <goals>
                <goal>compile</goal>
            </goals>
            <configuration>
                <sourceDirs>
                    <source>${basedir}/src/main/java</source>
                    <source>${basedir}/target/generated-sources/annotations</source>
                </sourceDirs>
            </configuration>
        </execution>
        <execution>
            <id>test-compile</id>
            <phase>test-compile</phase>
            <goals>
                <goal>test-compile</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <jvmTarget>1.8</jvmTarget>
    </configuration>
</plugin>

共有1个答案

丌官和泰
2023-03-14

嗯,在清除了所有IntelliJ项目文件(*.iml文件和.ideadirectory)之后,一切都运行良好,即使在调试中也是如此。

 类似资料:
  • 问题内容: 我想将测试包打包到jar文件中。如何从Maven插件Surefire执行生成测试包 问题答案: 您可以在pom中添加以下条目:

  • 主要内容:创建单元测试我们可以在 IntelliJ IDEA 中运行所有单元测试。IntelliJ IDEA 有各种单元测试框架,如 JUnit、TestNG 等等。在本节中,我们将了解单元测试的工作原理。在这里,我们将使用 JUnit 4: 创建单元测试 按照下面给出的步骤创建单元测试: 1. 创建项目 2. 在 src 文件夹中,创建一个Java 类文件并输入以下代码。 3. 创建一个名为Test的新目录来执行单元

  • 我目前正在与CDI Unit合作一个项目,我遇到了一个奇怪的问题。我试图在一个简单的项目中重现它: 我有一个使用CdiRunner运行的测试类(如下所述:http://jglue.org/cdi-unit-user-guide/我的测试类注入了被测试的单元:UUD。这个类扩展了一个超级类“ParentTestClass”,它目前是无用的。 测试课。爪哇: 正如我提到的,父类是空的。 ParentT

  • 问题内容: 有什么工具可以自动生成 Java 代码的单元测试? 更新: 主要用途是为将要重构的遗留代码快速生成单元测试。自动生成后,无需自动使测试与代码保持同步。 在这里提出了几乎相同的问题,但是答案是.NET而不是Java(Pex是公认的答案): 问题答案: CodePro Analytix有一个JUnit测试生成模块,听起来像它可以完成您想要的。请参阅《用户指南》。 [CoView]是价格合理

  • 我实现了一个新类Holder。目标如下: 三个领域。字段1和2是整数,字段3是布尔值 这给我留下的问题是有50个可能的构造函数选项。5 X 5 X 2。这是不明智的或可扩展的(添加第6种类型,我必须编写一个巨大的更改),所以我使用了构建器模式: 这真的很有效。我有5个用于字段1初始化的生成器方法,5个用于字段2初始化的生成器方法,还有一个用于布尔值。设置字段后,调用build()方法,该方法使用格

  • 我刚刚安装了IntelliJ,并试图构建一个Scala项目。但是,每次这样做时,我都会得到这个错误消息: