无法模拟通用对象创建

时间:2015-01-29 15:33:33

标签: java mockito junit4 generic-collections

我想为以下方法模拟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提前。

2 个答案:

答案 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),没有理由测试他们;只需确保您的(域)对象已经过全面测试,您应该在测试中覆盖正确的代码。