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



给定一个要测试的组件,该组件在构造函数注入中需要一个不可模拟的类(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和";注入";MyService的构造函数的param1参数的特定String值(或者测试这个需要传递非null String的类)?

我认为简单的答案不是使用@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 );

相关内容

  • 没有找到相关文章

最新更新