在JacoCo保持测试可比性的同时,需要忽略Lombok生成的代码-怎么做?

这里有很多有关指示在项目根目录内使用lombok.config文件并在其中添加以下条目的文章:

lombok.addLombokGeneratedAnnotation = true

但是我的问题略有不同。 具有Lombok批注的类还实现Comparable,然后实现compareTo方法。

@Document(collection = "item")
@Data
@Builder
public class Item implements Serializable,Comparable<Item> {

    @JsonIgnore
    private static final long serialVersionUID = 5816882082047405354L;
    @Id
    @JsonProperty
    private String id;
    @JsonProperty
    private String nome;
    @JsonProperty
    private Double valor;

    public int compareTo(Item o) {
        int retorno = this.nome.compareToIgnoreCase(o.getNome());
        if (retorno == 0) {
            if (this.getValor() < o.getValor()) {
                retorno = -1;
            } else if (this.getValor() > o.getValor()) {
                retorno = 1;
            }
        }
        return retorno;
    }
}

这是我的测试课。

public class TestItem {

    @Test
    public void shouldCompareFullAndBeEqual() {
        final Item item1 = Item.builder().nome("Item").valor(20.0).build();
        item1.setId("IDDCLIP");
        final Item item2 = Item.builder().nome("Item").valor(20.0).build();
        item2.setId("IDDCLIP");
        assertEquals(item1.compareTo(item2),item2.compareTo(item1));
    }    

    @Test
    public void shouldCompareAndBeDifferentByValue() {
        final Item item1 = Item.builder().nome("Item").valor(30.0).build();
        item1.setId("IDDCLIP");
        final Item item2 = Item.builder().nome("Item").valor(20.0).build();
        item2.setId("IDDCLIP");
        assertNotEquals(item1.compareTo(item2),item2.compareTo(item1));
    }

    @Test
    public void shouldCompareAndBeDifferentByVName() {
        final Item item1 = Item.builder().nome("Item1").valor(20.0).build();
        item1.setId("IDDCLIP");
        final Item item2 = Item.builder().nome("Item").valor(20.0).build();
        item2.setId("IDDCLIP");
        assertNotEquals(item1.compareTo(item2),item2.compareTo(item1));
    }

    @Test
    public void shouldCompareAndBeDifferentByNameAndValue() {
        final Item item1 = Item.builder().nome("Item1").valor(30.0).build();
        item1.setId("IDDCLIP");
        final Item item2 = Item.builder().nome("Item").valor(20.0).build();
        item2.setId("IDDCLIP");
        assertNotEquals(item1.compareTo(item2),item2.compareTo(item1));
    }    
}

尽管我在此类上运行单元测试,尽管它测试了compareTo(),但它并未出现在我的代码覆盖率报告中。

在JacoCo保持测试可比性的同时,需要忽略Lombok生成的代码-怎么做?

谁能帮我吗?

gchen3 回答:在JacoCo保持测试可比性的同时,需要忽略Lombok生成的代码-怎么做?

  1. 我注意到您的屏幕截图包含@EqualsAndHashCode.Exclude,而您的代码中却没有。谁知道您的设置中还有哪些其他区别?
  2. @Generated批注以及您的lombok.config文件应该对覆盖范围的详细信息没有影响。我希望完全没有覆盖数据或全部覆盖。不幸的是,您不要告诉我们您如何精确地衡量覆盖率。
  3. 该类本身很好,并且(几乎)完全被您的测试所覆盖。我手动确认。但是,如前所述,我的设置可能与您的设置完全不同。
,

我设法解决了这个问题。 @Test注释错误。我使用了错误的包装。之后,进行mvn清理,覆盖率达到100%

本文链接:https://www.f2er.com/3156234.html

大家都在问