繁体   English   中英

如何使用 Mockito 模拟类的静态成员变量?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM