FindBugs忽略@Nullable

时间:2015-06-22 19:21:24

标签: 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);
    } catch (final ApiDataError ex) {
        assertEquals(ex.getMessage(), format(ApiFault.NULL_VALUE, TEST));
        throw ex;
    }
}

FindBugs报告:

错误:com.foo.test.ex.ApiFaultTests.dateNull()中的非虚方法调用为com.foo.commons.ex.error.ApiFault.check(Date,String)的nonnull参数传递null )

如何让FindBugs停止哭狼?

我使用Eclipse Kepler,服务版本2和FindBugs 3.00。

2 个答案:

答案 0 :(得分:3)

使用exclusion filter告诉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>

答案 1 :(得分:1)

阅读此问题的其他帖子,我假设您的测试方法需要参数为非null,但您希望将null作为此单元测试的一部分进行传递。

在这种情况下,您只需使用@SuppressFBWarnings

注释单元测试方法即可
@SuppressFBWarnings(value="NP_NONNULL_PARAM_VIOLATION",
    justification="testing nullness contract violation")
@Test(expected = ApiDataError.class)
public void dateNull() throws ApiDataError {
    final Date date = null;
    ApiFault.check(date, TEST);
}