当有两个相同类型的变量时,模拟一个变量



我有以下类:

public class FinanceService {
  private BookingDao bookingMasterDao;
  private BookingDao bookingDao;
  public void createRecords(FinancialSummary financialSummary) {
    BookingEntity booking = bookingDao.loadById(1);
    //do stuff with this booking object
  }
}

我想模拟bookingDao,所以我有下面的单元测试类

public class FinanceServiceTest {
  @Mock
  private BookingDao bookingDao;
  @InjectMocks
  private FinanceService financeService = new FinanceService();
  @Before
  public void before() { MockitoAnnotations.initMocks(this);}
  @Test
  public void testCreateRecords() {
    BookingEntity bookingEntity = new BookingEntity();
    FinancialSummary financialSummary = new FinancialSummary();
    when(bookingDao.loadById(anyInt())).thenReturn(bookingEntity);
    financeService.createRecords(financialSummary);
  }
}

这将导致空指针异常,因为bookingMasterDao被模拟,但bookingDao没有。如果我在FinanceService中调换这两个位置,它就能工作。Mockito似乎是在模仿第一个匹配该类型的人。

是否有一种方法可以指示Mockito通过给它你想模拟的变量的名称?

From javadoc:

注1:如果你有相同类型的属性(或相同的擦除),最好用匹配的属性命名所有@Mock注释字段,否则Mockito可能会混淆,注入不会发生。

所以您必须为mock命名,参见Mock.html#name()

(旁注:因此您不能对两个DAO使用相同的模拟)。

很简单,只需声明两个 mock,一个用于每个目标DAO字段:

public class FinanceServiceTest {
    @Mock BookingDao bookingMasterDao;
    @Mock BookingDao bookingDao;
    ...
}    

相关内容

  • 没有找到相关文章

最新更新