gpt4 book ai didi

java - Eclipse:必需的 '@Nonnull Type' 阻止 JUnit 测试

转载 作者:行者123 更新时间:2023-12-02 10:59:36 27 4
gpt4 key购买 nike

到目前为止我的方法

我有一个带有这样签名的方法:

public static MyObject mapToOther(final MyInputType domain) {
Objects.requireNonNull(domain, () -> "message if domain is null");
// code …
return new MyObject;
}

此外,在 package-info.java , 我已经设定:
@CheckReturnValue
@ParametersAreNonnullByDefault
package my.package.mappers;

import javax.annotation.CheckReturnValue;

然后我创建了一个 JUnit 测试来检查如果 null 是否抛出 NullPointerException作为参数给出。
@Test(expected = NullPointerException.class)
public void testNpe_null() {
MyClass.mapToOther(null);
}

问题

测试很好,因为我想测试 NPE。但相反, eclipse 提示:
Null type mismatch: required '@Nonnull MyInputType' but the provided value is null

嗯,这个消息是绝对正确的。但是对于这个测试,这是一个误报,因为我故意交出 null作为参数值。

到目前为止我尝试了什么

我可以 Eclispe 不向非空方法报告故意的空值吗?我知道我可以使用此对话框完全禁用它:
Window -> Preferences ->  Java -> Compiler -> Errors/Warnings -> Section 'Null Analysis'

但是没有选项可以排除 src/test/java 中的方法或拥有 @SuppressWarnings已配置注释。

现在我的 Java 问题 View 充满了错误,其中大部分都在测试类中。 eclipse 真的那么傻吗?我正在使用氧气。

边注

特别感谢 Maven 集成的答案。 ;-)
另外,作为旁注:Spotbugs 提示我没有在我的 junit 测试中检查返回值......

最佳答案

参数不得为 null这意味着该方法的行为未定义 null并且不必测试,也可以是null并且参数用 @Nullable 注释.

但是,使用 null恒定它是可能的(虽然我不推荐这个黑客):

private static final Object NULL = null;

@Test(expected = NullPointerException.class)
@SuppressWarnings("null")
public void testNpe_null() {
MyClass.mapToOther((MyInputType) NULL);
}

请注意,这仅适用于常量 NULL不在 @ParametersAreNonnullByDefault 中包裹。

关于java - Eclipse:必需的 '@Nonnull Type' 阻止 JUnit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47133927/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com