如何编写使用 Azure SDK 的测试?

How to write tests that use Azure SDK?

我想知道如何编写测试,运行 在声纳中,将测试以下方法?

这似乎几乎是不可能的,因为声纳实际上无法获得 azure 订阅,所以这一切都必须被嘲笑。

如有任何帮助或指点,我们将不胜感激。

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;
    }
}

当您无法获得用于测试的真实对象时,您可以使用模拟(或存根)。

在您的示例中,如我所见,您必须模拟 getAzure() 方法,因此它 returns 是 Azure 类型的模拟。这个模拟必须为此提供适当的实现

azure.virtualMachines().getByResourceGroup(workspace + "-" + vm, vm);

还有这个

azure.metricDefinitions().listByResource(vmId);

方法。

对于模拟,您可以使用 Mockito 框架,它提供了一个有用的 API 用于创建和模拟对象和方法(使用代码或注释)。