我想知道如何编写将在声纳中运行的测试,以测试以下方法?
这似乎几乎是不可能的,因为声纳无法真正获得天蓝色订阅,因此这一切都必须被 mock 。
任何帮助或指示将不胜感激。
public AzureMetricRecords getVmMetrics(String azureSubscriptionId, String workspace, String vm, String metric, AggregationType aggregationType) {
Azure azure = getAzure(azureSubscriptionId);
String vmId = "/subscriptions/" + azureSubscriptionId + "/resourceGroups/" + workspace + "-" + vm +
"/providers/Microsoft.Compute/virtualMachines/" + vm;
VirtualMachine azureVm = azure.virtualMachines().getByResourceGroup(workspace + "-" + vm, vm);
if (azureVm != null) {
Map<String,MetricDefinition> metricsIndex = new HashMap<>();
List<MetricDefinition> definitions = azure.metricDefinitions().listByResource(vmId);
for (MetricDefinition d : definitions) {
metricsIndex.put(d.name().value(), d);
}
if (!metricsIndex.containsKey(metric)) {
throw new ValidationException("metric not found");
}
return getMetrics(DateTime.now(), metricsIndex.get(metric), aggregationType);
} else {
LOGGER.warn("getVmMetrics: Vm NOT found");
AzureMetricRecords metricRecords = new AzureMetricRecords();
metricRecords.setMetric(metric);
metricRecords.setAggregation(aggregationType.name());
return metricRecords;
}
}
请您参考如下方法:
当您无法获得用于测试的真实对象时,您可以使用模拟(或 stub )。
在您的示例中,正如我所看到的,您必须模拟 getAzure()
方法,因此它返回 Azure
类型的模拟。这个模拟必须按顺序为此提供正确的实现
azure.virtualMachines().getByResourceGroup(workspace + "-" + vm, vm);
还有这个
azure.metricDefinitions().listByResource(vmId);
方法。
对于模拟,您可以使用 Mockito框架,它提供了一个有用的 API,用于创建和模拟对象和方法(使用代码或注释)。