我有一个正在测试的类,它有一个来自另一个类的方法,我试图对其进行 stub ,以便它跳过它所做的事情并返回一个假对象
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();
...}
当我尝试运行此测试时。它尝试连接到数据库,但我不希望它这样做。
我做错了什么?
最佳答案
这里:
service = new Service();
这不会神奇地将您的模拟对象注入(inject)到该服务实例中。
您可能需要类似的东西:
service = new Service(mockedCache, mockedFactory);
还有这样的注释:
@InjectMocks
Service service;
您可以使用mockito自动执行此操作;但不幸的是,当注入(inject)失败时,这个构造不会给你一个错误。因此,简单地做类似的事情:
Servce underTest;
@Before
public void setup() {
underTest = new Service(....
关于java - stub 类仍然像通常调用的那样运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43656450/