#java #unit-testing #junit #integration-testing
#java #модульное тестирование #junit #интеграция-тестирование
Вопрос:
Мне интересно, как я могу написать тест, который будет выполняться в sonar, который будет тестировать следующий метод?
Это кажется почти невозможным, поскольку sonar не сможет фактически получить подписку 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;
}
}
Ответ №1:
Когда вы не можете получить реальный объект для своего теста, вы используете mocks (или заглушки).
В вашем примере, как я вижу, вам нужно создать макет getAzure()
метода, поэтому он возвращает макет Azure
типа. Этот макет, по порядку, должен обеспечивать надлежащие реализации для этого
azure.virtualMachines().getByResourceGroup(workspace "-" vm, vm);
и это
azure.metricDefinitions().listByResource(vmId);
методы.
Для макетирования вы можете использовать Mockito framework, который предоставляет полезный API для создания и макетирования объектов и методов (с использованием кода или аннотаций).