java - stub 类仍然像通常调用的那样运行

标签 java unit-testing mocking mockito

我有一个正在测试的类,它有一个来自另一个类的方法,我试图对其进行 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/

相关文章:

python - django 测试 response.context TypeError : 'NoneType' object is not subscriptable

c# - 是否可以在 Moq 中传递参数值?

Java - 创建一个新线程

java - 当 RestTemplate 从 spring 获取 null 响应时会发生什么?

ruby-on-rails - 未使用 minitest 加载固定装置来测试服务

php - Laravel 使用 Mockery Eloquent 模型进行模拟

java - Camel : Mock and return value from component in route

java - 为某个数组元素赋值

java - 如何使用 Byte Buddy 创建默认构造函数

c++ - 从单元测试用例运行线程是一个好习惯吗?