findbugs:读取@autowired forunit测试中的未写字段

时间:2011-11-02 13:32:39

标签: dependency-injection junit findbugs autowired

您好我的JUNIT测试中出现了findbugs错误。

这是我的测试。

public class MyTest {
    @Autowired
    private MyService  myService;

   @Test
   public void serviceShouldSayMine() {
         Assert.assertEquals(this.myService.getText(), "Mine");
   }
}

我发现错误过滤器。

<findbugsfilter>
<match>
  <class name="~.*Test"/>
  <or>
    <field name="~.*Dao"/>
    <field name="~.*Service"/>
    <field name="~.*TestUtils"/>
  </or>
  <bug pattern="UWF_UNWRITTEN_FIELD" type="UWF_UNWRITTEN_FIELD"/>
</match>
<match>
  <class name="~.*Test"/>
  <or>
    <field name="~.*Dao"/>
    <field name="~.*Service"/>
    <field name="~.*TestUtils"/>
  </or>
  <bug pattern="NP_UNWRITTEN_FIELD" type="NP_UNWRITTEN_FIELD"/>
</match>
</findbugsfilter>

我将过滤器添加到eclipse但我仍然收到错误读取未写入的字段myService,当我点击它时,它说

Pattern id: UWF_UNWRITTEN_FIELD, type: UwF, category: CORRECTNESS

This field is never written.  All reads of it will return the default value. 
Check for errors (should it have been initialized?), or remove it if it is useless.

以及

Pattern id: NP_UNWRITTEN_FIELD, type: NP, category: CORRECTNESS

The program is dereferencing a field that does not seem to ever have a non-null  
value written to it. Dereferencing this value will generate a null pointer exception.

我的过滤器有什么问题,

我的目标是过滤掉所有类

a。)以* Test或* TestCase结束

b。)上面的类以* Service或* Dao

结尾的方法

2 个答案:

答案 0 :(得分:3)

问题在于xml标签的情况。它应该是这样的:

<FindBugsFilter>
  <Match>
    <Class name="~.*Test"/>
    <Bug pattern="UWF_UNWRITTEN_FIELD" type="UWF_UNWRITTEN_FIELD"/>
  </Match>
</FindBugsFilter>

答案 1 :(得分:2)

尝试删除错误(转到问题或标记视图,右键单击并选择删除)。进行完全重建并查看错误是否恢复。

更改checkstyle规则时,它不会删除旧规则中的错误。所以你需要手动删除它们。