Stubbed类仍然像通常所说的那样运行

时间:2017-04-27 11:26:42

标签: java unit-testing mocking mockito

我有一个我正在测试的类,它有一个来自另一个类的方法,我试图存根,以便它跳过它所做的并返回一个假对象

class Service{
CacheClass cache;
CacheFactory factory;

public String getString(){
cache = factory.create();

...}

工厂创建连接到数据库,我想跳过这一步;我的测试看起来像这样

@Before
public void setup(){
cache = mock(CacheClass.class);
factory = mock(CacheFactory.class);
when(factory.create()).thenReturn(cache);
}

@Test
public void testGetString(){
service = new Service();
String s = service.getString();
...}

当我尝试运行此测试时。它试图连接到数据库,但我不希望它。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

下面:

service = new Service();

这并不会将您模拟的对象注入到该服务实例中。

您可能需要以下内容:

service = new Service(mockedCache, mockedFactory);

还有这个注释:

@InjectMocks
Service service;

你可以使用mockito自动执行;但不幸的是,这种结构在注入失败时不会给你一个错误。因此,简单地做类似的事情:

Servce underTest;

@Before
public void setup() {
  underTest = new Service(....