下面是实际代码
override fun deleteBudget(serverWebExchange: ServerWebExchange): Mono<Boolean> { logger.info("inside delete") return serverWebExchange.formData.map { formData -> val environment = objectMapper.readValue(formData.keys.iterator().next(), object : TypeReference<String>() {}) val budgetName = getEnvironmentBudgetName(environment) logger.info("Deleting Azure Budget $budgetName from account") val retrofit = azureClientImpl.retrofit() val budgetsInner = BudgetsInner(retrofit, azureClientImpl) budgetsInner.delete(budgetName) //here i am getting exception logger.info("Delete budget $budgetName successful") refreshBudgets = true true } }
下面是测试用例代码
@Test fun deleteBudgetSuccessful() { val retrofit = mockk<Retrofit>() every { azureBudgetRepo.getBudgetDetails() } returns azureObj.value val requestJson = objectMapper.writeValueAsString("Budget_name") val mockHttpRequest = MockServerHttpRequest.put("/") .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE) .body(requestJson) val exchange = MockServerWebExchange.builder(mockHttpRequest).build() every { azureClientImpl.retrofit() } returns retrofit val result = costService.deleteBudget(exchange).block() /*StepVerifier.create(result) .expectNext(true) .expectComplete() .verify()*/ Assertions.assertNotNull(result) }
当我运行此测试用例时,获得io.mockk.MockKException:没有找到针对BudgetsInner(#46).delete(Team)异常的答案,因为在执行测试时,调用 budgetsInner.delete(budgetName),但此方法的返回类型为 void ,因为此void返回类型的代码覆盖率不完整,并且测试用例失败。