如何将@InjectMocks和initMocks()与具有必需String参数的对象一起使用?

时间:2016-01-12 20:53:22

标签: mocking mockito

给定一个要测试的组件,在其构造函数注入中需要一个不可模拟的类(String),如下所示:

public class MyService {
    @Inject
    public MyService(String param1, SomeObject param2) {
        ...
    }
}

我想用Mockito用这样的测试工具来测试它:

public class MyServiceTests {
    @Mock
    private SomeObject someObject;

    @InjectMocks
    private MyService service;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
    }
}

问题是,我无法@Spy@Mock字符串(因为String是最终类)。那我怎么能用Mockito和"注入" param1构造函数的MyService参数的特定String值(或者测试此类需要传递非null String的类)?

2 个答案:

答案 0 :(得分:13)

我认为简单的答案不是使用@InjectMocks,而是直接初始化您的对象。我能看到的唯一缺点就是你没有测试注射,但随后用@InjectMocks,我认为你会用Mockito的注射实现测试它,而不是你真正的框架实现,所以没有真正的区别

我会这样做:

public class MyServiceTests {
  @Mock
  private SomeObject someObject;

  private MyService service;

  @Before
  public void setUp() {
    service = new MyService("foo", someObject);
  }
}

答案 1 :(得分:1)

尝试
@InjectMocks private MyService service = new MyService(param1,param2);