我有这样一个类:
public class CloudFormationManager
{
private static CloudFormationManager cloudFormationManager;
private final AmazonCloudFormation amazonCloudFormation;
private CloudFormationManager(final AmazonCloudFormation amazonCloudFormation)
{
this.amazonCloudFormation = amazonCloudFormation;
}
public List<StackResource> getStackResources(final String stackName)
{
ListStackResourcesRequest listStackResourcesRequest = new ListStackResourcesRequest();
listStackResourcesRequest.setStackName(stackName);
ListStackResourcesResult listStackResourcesResult =
amazonCloudFormation.listStackResources(listStackResourcesRequest);
if (nonNull(listStackResourcesResult))
return getStackResources(listStackResourcesResult);
else
return Collections.emptyList();
}
}
我开始使用Mockito编写UT,如下所示:
@Test
public class CloudFormationManagerTest
{
@Mock
private AmazonCloudFormation amazonCloudFormation;
@InjectMocks
CloudFormationManager cloudFormationManager;
@BeforeMethod
public void setUp() throws IOException
{
CloudFormationManager cloudFormationManager = new CloudFormationManager(amazonCloudFormation); // this statement gives an error.
MockitoAnnotations.initMocks(this);
}
@Test
void testGetStackResources()
{
}
}
现在,在setUp()
方法中,我看到一个错误,说这个类不能被初始化,我理解这一点,因为它是一个私有构造函数?那么我该如何使用Mockito初始化它?
1条答案
按热度按时间ymdaylpp1#
您似乎不清楚
@Mock
和@InjectMocks
的功能。使用
@Mock
,你创建了一个 mocked 对象。使用@InjectMocks
,你让Mockito insert 所有@Mock
对象到某个测试对象中。您的类
CloudFormationManager
有两个字段。因此,您 * 可能 * 需要:现在Mockito应该在调用
initAnnotiations()
时设置这两个字段。有关详细信息,请参阅here。