如何解决如何检查注入服务中是否调用了方法?
我正在编写 Micronaut 测试来测试我的缓存功能。有一个 Service Singleton 类,它具有常规的 @Cacheable、@CacheInvalidate 注释方法。服务类中的方法调用 Repository 类,该类与数据库联系以获取所需的数据。
为了测试缓存,我使用@Inject 和@Spy 注释注入了服务,并为存储库注入了@MockBean。我添加了一个存根以使用 Mockito.when(repo.fetch("X")).thenReturn(DB Object) 从 Repository Mock 返回一些虚拟数据。现在,当我打电话给服务时。我可以使用 Mock.verify 检查我的存储库是否第一次被调用。但我也想验证是否调用了我的服务中的方法。我尝试使用 Mockito.verify(Service).method("X") 但它没有说对象不是 Mock。
那么,如何验证我的方法是否被调用?继续,我还想确认当我传入相同的参数时,我的方法没有被调用(因为它会在第一次调用后被缓存)。
解决方法
如何验证我的方法是否被调用?
您可以使用 verify
方法。
以下示例来自micronaut-projects.github.io/micronaut-test/2.3.7/guide/#junit5
package io.micronaut.test.junit5;
import io.micronaut.test.annotation.MockBean;
import io.micronaut.test.extensions.junit5.annotation.MicronautTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import javax.inject.Inject;
import static org.mockito.Mockito.*;
@MicronautTest
class MathMockServiceTest {
@Inject
MathService mathService;
@ParameterizedTest
@CsvSource({"2,4","3,9"})
void testComputeNumToSquare(Integer num,Integer square) {
when(mathService.compute(10))
.then(invocation -> Long.valueOf(Math.round(Math.pow(num,2))).intValue());
final Integer result = mathService.compute(10);
Assertions.assertEquals(
square,result
);
verify(mathService).compute(10);
}
@MockBean(MathServiceImpl.class)
MathService mathService() {
return mock(MathService.class);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。