Как написать тесты, которые используют Azure SDK? - PullRequest
0 голосов
/ 12 апреля 2019

Мне интересно, как я могу написать тест, который будет работать в сонаре, который будет тестировать следующий метод?

Это кажется почти невозможным, поскольку гидролокатор не сможет фактически получить лазурную подписку, так что все это нужно будет высмеивать.

Любая помощь или указатели будут оценены.

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

1 Ответ

1 голос
/ 12 апреля 2019

Когда вы не можете получить реальный объект для своего теста, вы используете mocks (или заглушки).

В вашем примере, как я вижу, вам нужно смоделировать метод getAzure(), чтобы он возвращалмакет типа Azure.Этот макет, по порядку, должен обеспечить правильные реализации для этого

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

и этого

azure.metricDefinitions().listByResource(vmId);

методов.

Для имитации вы можете использовать Mockito framework, который предоставляет полезный API для создания и моделирования объектов и методов (с использованием кода или аннотаций).

...