我想为以下方法模拟dao创建。
private ReturnType createTenant(){
TenantDto tenantDto = new TenantDto();
TenantGroupDto tenantUserGroupDto = new TenantGroupDto(DEFAULT_USER_GROUP_NAME,Type.HUMAN,DEFAULT_USER_GROUP_DESCR, true);
TenantGroupDto tenantDeviceGroupDto = new TenantGroupDto(DEFAULT_DEVICE_GROUP_NAME,Type.DEVICE,DEFAULT_DEVICE_GROUP_DESCR, true);
Set<TenantGroupDto> tenantGroups = new HashSet<TenantGroupDto>();
tenantGroups.add(tenantUserGroupDto);
tenantGroups.add(tenantDeviceGroupDto);
tenantDto.setTenantGroup(tenantGroups);
tenantDto = tenantDao.create(tenantDto);
return someOtherOperation(tenantDto);
}
然而,我能够嘲笑其他事情。我无法模仿通用创作。
即。
Set<TenantGroupDto> tenantGroups = new HashSet<TenantGroupDto>();
由于tenantGroups是参数
,因此需要进行模拟tenantDao.create(tenantDto);
我搜索的大多数链接/问题都是从某个方法返回泛型对象的时间。我无法找到创建通用对象的任何解决方案。任何帮助表示赞赏。
Thx提前。
答案 0 :(得分:1)
这是如何创建泛型类的模拟。
@Mock
Set<TenantGroupDto> tenantGroups
@Before
public void init(){
MockitoAnnotations.initMocks(this);
}
@Test
public void myTest(){
when(tenantGroups....
}
答案 1 :(得分:1)
Mockito(单独)无法真正模拟对象,泛型或其他方面的实例化(尽管you can get close)。
这是人们使用Factory pattern的经典原因,允许可插拔工厂允许在运行时决定不同类型的对象,或者允许使用模拟/存根进行整洁的封装测试,例如在这种情况下。
至于集合(例如HashSet
),没有理由测试他们;只需确保您的(域)对象已经过全面测试,您应该在测试中覆盖正确的代码。