当前位置: 首页 > 知识库问答 >
问题:

将bean注入到用mockito创建的模拟中

太叔鹏云
2023-03-14

目前,我遇到了一些莫基托图书馆的麻烦...更确切地说,我无法将userRepository bean注入到我的模拟服务中。对于依赖注入,我使用的是spring boot。下面是一些代码示例:

@Service
public class UserService {

     @Autowired private TokenService tokenService;
     @Autowired private UserRepository userRepository;

     public User updateUser(User user) {
         validateUser(user); // can throw some validation errors
         createToken(user); // creates token to my user
         return userRepository.save(user);
      }
}

在我的测试方法中,我想在用户得到更新之前跳过验证和令牌创建。

UserService userService = mock(UserService.class);
doNothing(userService).validateUser(any());
doNothing(userService).createToken(any());

因此,当我调用updateUser方法时,问题出现在我的测试方法中,它失败了,因为我的userRepository没有注入(NullPointerException)。我尝试了@mock和@injectmocks,但这些注释是用来注入模拟的。我怎样才能把一个真正的豆子注入我的模拟呢?使用Mockito可能吗?谢谢.

共有1个答案

杜阳泽
2023-03-14

当前您正在模拟一个服务,这意味着您正在用模拟对象替换整个实例,甚至替换字段。如果您对部分嘲讽感兴趣(因为您想在内部使用真正的bean),那么您应该阅读关于间谍的内容(@spy使用一个真实的对象,但允许执行部分嘲讽)。

我不确定您想做什么,但我的建议是创建SpringBootTest(它加载应用程序上下文并创建所有bean),监视UserService bean,并最终模拟服务的行为,就像您现在所做的那样。

我从未尝试过刺探bean,但我发现了一些东西:https://shekhargulati.com/2017/07/20/using--boot-spybean/

 类似资料:
  • 问题内容: 我想将Mockito模拟对象注入到Spring(3+)bean中,以进行JUnit的单元测试。我的bean依赖项当前是通过在私有成员字段上使用注释来注入的。 我考虑过使用,但是我希望注入的bean实例实际上是一个代理,因此没有声明目标类的私有成员字段。我不希望为依赖项创建一个公共的setter,因为我将纯粹出于测试目的而修改接口。 我遵循了Spring社区提供的一些建议,但是未创建该模

  • 问题内容: 我有以下代码: 我想使用Mockito创建一个测试。我编写了如下测试: 我在网上收到NullPointerException: ,它表示“策略”列表已初始化,但为空。Mohito有什么办法可以像Spring一样浪费时间?是否将所有实现接口“策略”的实例自动添加到列表中? 顺便说一句,我在Wrapper类中没有任何二传手,如果可能的话,我想以这种方式离开。 问题答案: Mockito不知

  • 我对单元测试有问题。下面是示例代码片段。我模拟了一个bean,并将其注入@configuration类,然后使用mocked属性创建另一个bean。 在下面的示例中,如果我检查,b.getSomething()会返回默认值,如字符串为“”,int为0等。我不会得到模拟值。你知道怎么做吗?

  • 我有一个带有的测试类,它用于初始化Mockito: 现在我有一个@autowired field来获得方面的建议,但不能注入模拟。

  • spring日志中的info消息显示: 示例: 下面有一个简单的示例,可以使用。这里,Bar是嵌套在Foo内部的,我需要模拟Bar进行测试: 现在对于测试来说,假设我想注入一个mockbar而不是真正的bar。我如何在下面的测试类中实现这一点? 实际测试用例:

  • 我对摩基托并不陌生,但这次我在工作中发现了一个有趣的案例。我希望你能帮我解决这件事。 我需要注入mock来改变测试过程中的某些方法行为。问题是,bean结构是嵌套的,并且这个bean在其他bean内部,不能从test方法访问。我的代码如下所示: 所以在我的测试中,我希望调用nestedDAO.method返回模拟答案。 我尝试执行一个initmocks: 还要在我的测试类上添加注释: 总是从方法获