Java 如何使用@InjectMocks作为要模拟的另一个类的依赖项?

Java 如何使用@InjectMocks作为要模拟的另一个类的依赖项?,java,spring,dependency-injection,mockito,spring-test,Java,Spring,Dependency Injection,Mockito,Spring Test,假设我有一门课: public class Boy { @Inject @Named("birthDay") BirthDay bday; } 我想模拟它,但问题是生日类本身使用了一个依赖项,我也想模拟和控制它,我不能在同一个类上同时使用@InjectMocks和@mock,你如何实现同样的效果?为什么需要在模拟中注入一些东西? 您需要有两个测试

假设我有一门课:

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

我想模拟它,但问题是生日类本身使用了一个依赖项,我也想模拟和控制它,我不能在同一个类上同时使用@InjectMocks和@mock,你如何实现同样的效果?

为什么需要在模拟中注入一些东西? 您需要有两个测试类来测试
男孩
生日

在这里,您应该测试一个
Boy
类的逻辑

public class BoyTest{
  @Mock
  private BirthDay brithday;

  @InjectMock
  private Boy boy;
}
生日的逻辑应该有自己的测试类

public class BirthDayTest {
  @Mock
  private Dependency dependency ;

  @InjectMock
  private BirthDay brithday;
}

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

为什么需要在模拟中注入一些东西? 您需要有两个测试类来测试
男孩
生日

在这里,您应该测试一个
Boy
类的逻辑

public class BoyTest{
  @Mock
  private BirthDay brithday;

  @InjectMock
  private Boy boy;
}
生日的逻辑应该有自己的测试类

public class BirthDayTest {
  @Mock
  private Dependency dependency ;

  @InjectMock
  private BirthDay brithday;
}

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

当您模拟生日并在男孩身上进行@injectmocks时,您会遇到什么问题?假设生日有一个我想要模拟和控制的字段日期,并且它在生日时被注入;我如何在我的测试课上模拟它?当你模拟生日并在男孩身上做@injectmocks时,你会遇到什么问题?假设生日有一个我想要模拟和控制的字段日期,它在生日中被注入;我如何在我的测试类中模拟它?我实际上想在该模拟中使用一个函数(它访问最终保存数据的DAO,我想模拟相同的DAO)。我需要使用手动刀吗?或者我可以使用when-then来完成它吗?我宁愿使用when-then子句。因为您正在测试Boy类,所以您应该假设您的模拟返回您需要的数据。否则它就不再是单元测试了。如果您想为@InjectMock准备一些不可由@Mock处理的依赖项,该怎么办。例如Context。@Kenji我不确定我是否理解了你的问题,但是如果你想通过真正的实现,那么你可以自己初始化字段并用
@Spy
标记它,如下所示:
@Spy private Context Context=new Context()@SergiiBishyr那么它可以被“@moke”ed对象使用?我实际上想在该模拟中使用一个函数(它访问最终保存数据的DAO,我想模拟相同的DAO)。我需要使用手动刀吗?或者我可以使用when-then来完成它吗?我宁愿使用when-then子句。因为您正在测试Boy类,所以您应该假设您的模拟返回您需要的数据。否则它就不再是单元测试了。如果您想为@InjectMock准备一些不可由@Mock处理的依赖项,该怎么办。例如Context。@Kenji我不确定我是否理解了你的问题,但是如果你想通过真正的实现,那么你可以自己初始化字段并用
@Spy
标记它,如下所示:
@Spy private Context Context=new Context()@SergiiBishyr那么它可以被“@moke”对象消耗?