java - 如何使用 Mockito 测试数据库调用
问题描述
所以我是junit和mockito的新手。我决定我想尝试构建一个实际上已经完成了一些测试的 Spring Boot 项目。这是我到目前为止所拥有的。
@ExtendWith(MockitoExtension.class)
class AccountServiceTest {
private AccountService accountService;
@Mock
private AccountRepository accountRepository;
@BeforeEach
void initServices(){
this.accountService = new AccountService(accountRepository);
}
@Test
@DisplayName("Get Account by Name 'Foo'")
void getAccountByName() {
assertNotNull(accountService);
//Create mocks
Account expected = new Account("2","Foo", "IT");
when(accountRepository.findByName("Foo")).thenReturn(Optional.of(expected));
Account actual = accountService.getAccountByName("Foo");
assertEquals(expected.getId(), actual.getId(), "Error, actual doesnt match expected");
}
}
现在这个测试通过了,但据我了解,我意识到我只是在输入我想要使用“when”函数调用出现的值。当我不知道实际服务是否会以这种方式运行时,模拟此功能的目的是什么?基本上我的理解是正确的,我正在提供我想要出现的值,或者服务实际上被调用并对我的数据库进行查询?此外,如果是这种情况,我将这些值提供给它,那么以这种方式进行测试有什么意义呢?
解决方案
以这种方式进行测试的目的是确保您的 AccountService 正常工作,前提是 AccountRepository 正常工作
您不应该使用 Mockito 来测试数据库交互。为此使用像 h2 这样的嵌入式数据库
推荐阅读
- gdb - qemu-system-riscv32 -M sifive_u 如果使用 OpenSBI 启动,则无法使用 GDB 进行调试(-bios 默认)
- python - 在 python 中比较同一数据框中的第 1 行和第 2 行(依此类推)
- javascript - 为什么 React 不删除所需的组件而是删除最后一个兄弟?
- django - 模型表单中的更新日期时间字段仅显示纯文本而不是 datepicker Django
- httprequest - Elsa Workflow - Fork(控制流)
- wordpress - 如何从单个产品页面 woocommerce 中隐藏标签和类别?WordPress
- flutter - 获取生成器
无法将小部件标记为需要构建,因为框架已在进程中 - python - 如何将 PDF 从一个 lambda 发送到另一个?
- javascript - 解析 html 标签以在 javascript 中显示为真正的 html 组件
- php - 使用 PHP 从 FTP 上的 ZIP 文件中读取文件,无需下载整个存档