【问题标题】:Can't seem to get Lombok to work in unit tests似乎无法让 Lombok 在单元测试中工作
【发布时间】:2012-05-25 12:21:21
【问题描述】:

我们一直在整理一些(非常简单的)代码,以便测试并将 Lombok 注释引入我们的项目,以使我们的代码更好一些。不幸的是,似乎在通过 Maven 和通过 IntelliJ 运行测试时都中断了测试。

我们的域类看起来像:

package foo.bar;

import lombok.Data;

@Data
public class Noddy {

    private int id;
    private String name;

}

有相应的测试:

package foo.bar;

import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class NoddyTest {

    @Test
    public void testLombokAnnotations(){
        Noddy noddy = new Noddy();
        noddy.setId(1);
        noddy.setName("some name");
        assertEquals(noddy.getName(), "some name");
    }
}

我们有 Maven 中的 aspectjrt 依赖项(以及 IntelliJ 中的相关插件)和 aspectj-maven-plugin。

我们使用 Maven 2 风格的 POM、JSDK 1.6.0_31、Lombok 0.11.0:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>0.11.0</version>
</dependency>

我们是在做一些愚蠢的事情还是遗漏了一些显而易见的事情?

如果我们能实现这个功能那就太好了,因为我已经关注在生产中使用 Lombok 已经有一段时间了。

非常感谢,

P.

(FWIW,IntelliJ 11.1.2 有 Lombok 插件 0.4,似乎在这个项目中使用 ACJ)

【问题讨论】:

  • 你有没有找到解决这个问题的方法?

标签: java unit-testing junit intellij-idea lombok


【解决方案1】:

问题似乎是 lombok 生成的代码被 ajc 覆盖,并且根据我发现的 Fabrizio Giudici 的博客条目,由于 Maven AspectJ 插件中的错误阻止您通过ajc 的必要参数。

他在这里提出了一个解决方法:http://weblogs.java.net/blog/fabriziogiudici/archive/2011/07/19/making-lombok-aspectj-and-maven-co-exist

实际上,this 为我工作,它可以说是一个更清洁的解决方案。您可能需要使用额外的 weave 目录为测试类添加执行阶段。

【讨论】:

    【解决方案2】:

    不幸的是,我测试了第二个解决方案 - mentioned by mhvelplund - 但它对我不起作用。解决方案是从 pom.xml 中完全删除 AspectJ maven 插件!

    【讨论】:

    • 请不要使用短链接服务在您的答案中包含网址。
    • OK 不知道,只是复制/粘贴了 mhvelplund 自己提供的链接。
    • 事实上,我不知道 Maven 3 和 Maven 2 之间有区别。根据mojo.codehaus.org/aspectj-maven-plugin/includeExclude.html,当使用 Maven 2 时,您必须将一个空的 元素嵌套在 元素。而1.4也很重要,否则配置将不起作用。
    猜你喜欢
    • 1970-01-01
    • 2011-11-30
    • 2015-09-20
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多