【问题标题】:How to get rid of Mockito mock Uninitialized read findbugs warning如何摆脱 Mockito mock Uninitialized read findbugs 警告
【发布时间】:2016-09-16 05:53:05
【问题描述】:

如何初始化user,这样我就可以在没有发现错误警告的情况下执行user.getUserId()?

new .service.MockUserService() 中未初始化的用户读取 [.service.MockUserService] 在 MockUserService.java:[第 21 行]

public class MockUserService extends UserService {

    public static final String FOO_USER_ID = "fooUser";

    @Mock
    private User user;


    public MockUserService() {
        super();
        MockitoAnnotations.initMocks(this);
        Mockito.when(user.getUserId()).thenReturn(FOO_USER_ID);
    }

    @Override
    public User getUser() {
        return getUserSafe();
    }

    @Override
    public User getUserSafe() {
        return user;
    }
}

【问题讨论】:

    标签: java mockito findbugs


    【解决方案1】:

    我不太了解 findbug,因为我使用的是声纳。对于静态代码分析工具,我通常发现默认规则并不总是最好的,因此我倾向于调整它们并更新它们以适应新的开发模式。

    无论如何,对于 findbugs,谷歌搜索提供了两种可能的解决方案

    • 在每个字段上使用 findbug 注释(findbugs 3.0.0)

      @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
          value="UR", 
          justification="This is an auto injected mock")
      
    • 或者设置一个过滤器来忽略Mock注解。

      <Match>
         <Bug code="UR">  
         <Field annotation="Mock">
      </Match>
      

    请注意,这两个都是伪代码,我是通过智能手机编写的。所以可能缺少强制性声明和/或规则 (UR) 可能是错误的,错误描述在 findbug 网站上。

    这些想法大多来自:

    1. Is there a way to ignore a single FindBugs warning?
    2. http://www.scriptscoop2.com/t/0044ed425b4f/java-how-to-set-a-findbugs-filter-for-fields-with-a-specific-annotation.html
    3. http://findbugs.sourceforge.net/bugDescriptions.html

    我想指出,本示例中使用 mockito 的方式似乎是错误的。这是我的建议:

    1. User 是实体或值对象,我强烈建议不要模拟此类类。对于这些,我更喜欢使用 builders。通常我会制作一个 test 构建器,可以像 UserBuilder.userWithId(73L).build() 那样使用
    2. 最后改为模拟 UserService 以返回预配置用户 BDDMockito.given(user_service_mock.getUser()).willReturn(preconfigured_user)

    【讨论】:

      猜你喜欢
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 2016-02-04
      • 2021-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多