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

E-R*_*Riz 9 mocking mockito

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

public class MyService {
    @Inject
    public MyService(String param1, SomeObject param2) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

public class MyServiceTests {
    @Mock
    private SomeObject someObject;

    @InjectMocks
    private MyService service;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,我不能@Spy@MockStrings(因为String是最后一堂课).那么我怎样才能使用Mockito并为构造函数的param1参数"注入"一个特定的String值MyService(或者测试这个需要传递非null String的类)?

Dav*_*ave 14

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

我会做:

public class MyServiceTests {
  @Mock
  private SomeObject someObject;

  private MyService service;

  @Before
  public void setUp() {
    service = new MyService("foo", someObject);
  }
}
Run Code Online (Sandbox Code Playgroud)