无法模拟通用对象创建

unable to mock generic object creation

我想为以下方法模拟 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);

我搜索的大多数 links/questions 都是从某些方法返回通用对象的时间。我找不到创建通用对象的任何解决方案。任何帮助表示赞赏。
提前致谢。

这是创建通用模型的方法 class。

@Mock
Set<TenantGroupDto> tenantGroups 

@Before
public void init(){
MockitoAnnotations.initMocks(this);
}

@Test
public void myTest(){
when(tenantGroups....
}

Mockito(单独)无法真正模拟对象、泛型或其他方式的 实例化 (尽管 you can get close)。

这是人们使用 Factory pattern 的经典原因,允许可插拔工厂允许在运行时决定不同类型的对象,或者允许像在这种情况下一样使用模拟/存根进行整洁、封装的测试。

至于集合(例如HashSet),几乎没有理由去测试它们;只需确保您的(域)对象经过全面测试,并且您应该在测试中覆盖正确的代码。