繁体   English   中英

如何使用Mockito测试Azure ARM API?

[英]How to test Azure ARM API using mockito?

我正在研究诸如置备VM的Azure ARM方法,并使用java sdk列出所有VM。 我想使用Mockito测试我的方法。 我如何做到这一点,而不必先发出天蓝色的电话。

public class ListAllVM{
    public static Azure azure = null;
    public void listAllVM() {
    azure = getAuthentication();
    try {
        int i = 0;
        for (VirtualMachine VM : azure.virtualMachines().list()) {
            System.out.println(++i +
                    " \n VM ID:-" +  VM.id() +
                    " \n VM Name:-" +  VM.name() +
                    "\n");
        }
    } catch (CloudException | IOException | IllegalArgumentException e) {
        log.info("Listing vm failed");      }
  }
}

获取虚拟机列表时遇到问题。 如何模拟外部API类。

您的问题是:您编写了很难测试的代码-使用staticnew 快速建议如何做不同的事情:

public class AzureUtils {
  private final Azure azure;

  public AzureUtils()  { this (  getAuthentication(); }
  AzureUtils(Azure azure) { this.azure = azure };

  public List<VM> getVms() {
     return azure.virtualMachines.list();
  }

在我的版本,你可以使用依赖注入 插入 Azure.class的嘲笑版本。 现在,您可以使用任何一种模拟框架 (例如EasyMock或Mokito)来提供一个Azure对象,该对象将再次返回模拟对象。

作为记录:我不确定您的代码从哪里获取getAuthentication() 因此,除非这是静态导入; 首先,您的代码出了点问题。

换句话说:您想学习如何编写可测试的代码; 例如通过观看这些视频

另一方面,有一条评论说Azure类是最终的。 它的构造函数是私有的。 很好,这很公平:使用final设计API时,这是表达意图的强大工具。

从那里来的您实际上实际上仅限于:

  • 如上文所述:您可以创建类似于AzureUtils的抽象-这样,您至少可以保护自己的代码免受Microsoft设计决策的影响
  • 您可以在Mockito中启用新的实验功能,该功能可以模拟最终课程
  • 您转向PowerMock(ito)或JMockit

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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