[英]How do I mock static member variables of a class using Mockito?
我有这样的课:
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?
您似乎不清楚@Mock
和@InjectMocks
的作用。
使用@Mock
,您可以创建一个模拟对象。 使用@InjectMocks
,您可以让 Mockito将所有@Mock
对象插入到某个被测对象中。
您的CloudFormationManager
类有两个字段。 因此,您可能需要:
@Mock
private AmazonCloudFormation mockedAmazonCloud;
@Mock
CloudFormationManager mockedFormationManager;
@InjectMocks
CloudFormationManager cloudFormationManager;
现在 Mockito 应该在调用initAnnotiations()
时设置这两个字段。
请参阅此处以进一步阅读。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.