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

这似乎几乎是不可能的,因为声纳无法真正获得天蓝色订阅,因此这一切都必须被 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,用于创建和模拟对象和方法(使用代码或注释)。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!