Java FindBugs忽略@Nullable

Java FindBugs忽略@Nullable,java,nullable,findbugs,Java,Nullable,Findbugs,我有一个单元测试,其中我故意将null参数传递给一个方法,以验证该方法是否正确地检测到null。我在参数中添加了@Nullable注释,但FindBugs抱怨(故意)null参数是错误的。代码如下: @Test(expected = ApiDataError.class) public void dateNull() { try { @Nullable final Date date = null; ApiFault.check(date, TEST);

我有一个单元测试,其中我故意将null参数传递给一个方法,以验证该方法是否正确地检测到null。我在参数中添加了@Nullable注释,但FindBugs抱怨(故意)null参数是错误的。代码如下:

@Test(expected = ApiDataError.class) public void dateNull() {
    try {
        @Nullable final Date date = null;
        ApiFault.check(date, TEST);
    } catch (final ApiDataError ex) {
        assertEquals(ex.getMessage(), format(ApiFault.NULL_VALUE, TEST));
        throw ex;
    }
}
FindBugs报告:

错误:com.foo.test.ex.apifulttests.dateNull()中的非虚拟方法调用将com.foo.commons.ex.error.apifult.check(日期,字符串)的非空参数传递为null

我怎样才能让芬德布格停止哭泣

我在FindBugs 3.00中使用Eclipse开普勒服务版本2。

在分析单元测试类时,使用命令告诉FindBugs不要报告错误。您的筛选器可能如下所示:

<FindBugsFilter>
    <!-- Passing null is deliberate in this unit test-->
    <Match>
        <Class name="com.foo.test.ex.ApiFaultTests" />
        <Method name="dateNull" />
        <Bug code="NP" />
    </Match>
</FindBugsFilter>

在分析单元测试类时,使用命令告诉FindBugs不要报告错误。您的筛选器可能如下所示:

<FindBugsFilter>
    <!-- Passing null is deliberate in this unit test-->
    <Match>
        <Class name="com.foo.test.ex.ApiFaultTests" />
        <Method name="dateNull" />
        <Bug code="NP" />
    </Match>
</FindBugsFilter>

阅读关于这个问题的其他帖子,我假设您的测试方法预期参数为非null,但您希望通过
null
作为这个单元测试的一部分

在这种情况下,您可以简单地用
@SuppressFBWarnings
注释单元测试方法:

@SuppressFBWarnings(value=“NP\u NONNULL\u PARAM\u违规”,
理由=“测试无效合同违反”)
@测试(预期=ApiDataError.class)
public void dateNull()引发ApiDataError{
最终日期=空;
检查(日期、测试);
}

阅读关于这个问题的其他帖子,我假设您的测试方法预期参数为非null,但您希望通过
null
作为这个单元测试的一部分

在这种情况下,您可以简单地用
@SuppressFBWarnings
注释单元测试方法:

@SuppressFBWarnings(value=“NP\u NONNULL\u PARAM\u违规”,
理由=“测试无效合同违反”)
@测试(预期=ApiDataError.class)
public void dateNull()引发ApiDataError{
最终日期=空;
检查(日期、测试);
}

您是否也将
@Nullable
添加到被调用的方法中?仅将其放在示例中所示的
date
变量上没有任何效果。这些注释将作为合同的一部分使用。我将再次回复。Stackoverflow的脑死亡格式正在折磨我。过滤器文件不工作,仅供参考,堆栈溢出希望您在问题中输入其他信息,而不是在注释中。这样,阅读您的问题的人可以在一个地方找到所有信息。只需在您的问题下按edit并在那里添加筛选文件。您是否也将
@Nullable
添加到被调用的方法中?仅将其放在示例中所示的
date
变量上没有任何效果。这些注释将作为合同的一部分使用。我将再次回复。Stackoverflow的脑死亡格式正在折磨我。过滤器文件不工作,仅供参考,堆栈溢出希望您在问题中输入其他信息,而不是在注释中。这样,阅读您的问题的人可以在一个地方找到所有信息。只需在你的问题下按edit,然后在那里添加过滤文件。这非常令人沮丧。这是我的过滤文件(我希望):我放弃了。这个系统似乎决心阻止我进入任何实质性的领域。堆栈溢出太糟糕了。@AdamRichards可能会尝试编辑您的问题以包含您的筛选器?展示如何调用FindBugs可能也很有用。这非常令人沮丧。这是我的过滤文件(我希望):我放弃了。这个系统似乎决心阻止我进入任何实质性的领域。堆栈溢出太糟糕了。@AdamRichards可能会尝试编辑您的问题以包含您的筛选器?显示如何调用FindBugs可能也很有用。对于可以修改源代码的情况(如OP),这看起来比使用外部筛选文件更好。对于可以修改源代码的情况(如OP),这看起来比使用外部筛选文件更好。