[英]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类。
您的问题是:您编写了很难测试的代码-使用static和new 。 快速建议如何做不同的事情:
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设计决策的影响
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.