【问题标题】:How To Use @InjectMocks For A Dependency For Another Class To Be Mocked?如何使用@InjectMocks 来模拟另一个类的依赖关系?
【发布时间】:2016-10-06 05:45:43
【问题描述】:

假设我有一堂课:

   public class Boy
          {
                 @Inject 
                 @Named("birthDay")
                 BirthDay bday;
          }

我想模拟它,但问题是 BirthDay 类本身使用了我也想模拟和控制的依赖项,我不能在同一个类上同时使用 @InjectMocks 和 @Mock,你怎么做达到同样的效果?

【问题讨论】:

  • 当你模拟生日并在 Boy 上制作 @injectmocks 时遇到什么问题?
  • 说生日有一个我想模拟和控制的字段日期,它被注入到生日中;如何在我的测试课中模拟它?

标签: java spring dependency-injection mockito spring-test


【解决方案1】:

为什么需要在模拟中注入一些东西? 你需要有两个测试类来测试BoyBirthDay 类。

在这里你可以测试 Boy 类的逻辑

public class BoyTest{
  @Mock
  private BirthDay brithday;

  @InjectMock
  private Boy boy;
}

BirthDay 的逻辑应该有它自己的 Test 类。

public class BirthDayTest {
  @Mock
  private Dependency dependency ;

  @InjectMock
  private BirthDay brithday;
}

因此,您应该假设您的模拟返回了一些您需要的数据。并检查您的待测单元在给定数据下是否按预期工作。

【讨论】:

  • 我实际上想在那个模拟中使用一个函数(它访问最终保存数据的 DAO,我想模拟相同的)。我是否需要为此使用手动 DAO?或者我可以使用 when-then 来做吗?
  • 我宁愿使用 when-then 子句。因为您正在测试 Boy 类,所以您应该假设您的模拟返回您需要的数据。否则它就不再是单元测试了。
  • 如果你想为 @InjectMock 准备一些 @Mock 无法处理的依赖项怎么办。例如上下文。
  • @Kenji 我不确定我是否理解你的问题,但是如果你想通过真正的实现,那么你可以自己初始化字段并用@Spy标记它,像这样: @Spy private Context context = new Context();
  • @SergiiBishyr 那么它可以被“@Mocke”ed对象消耗掉吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
  • 2019-04-15
  • 1970-01-01
  • 2018-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多