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

How to use @InjectMocks and initMocks() with an object that has a required String parameter?

给定一个要测试的组件,在其构造函数注入中需要不可模拟的 class (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 是最终的 class)。那么我如何使用 Mockito 并将 param1 参数的特定字符串值“注入”到 MyService 的构造函数(或者以其他方式测试需要传递非空字符串的 class )?

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

我愿意:

public class MyServiceTests {
  @Mock
  private SomeObject someObject;

  private MyService service;

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

你可以试试这个:

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