gpt4 book ai didi

java - Spring 数据: Service layer unit testing

转载 作者:IT老高 更新时间:2023-10-28 13:48:10 26 4
gpt4 key购买 nike

在我的项目中,我在进行单元测试时遇到了麻烦。一个问题是,仅进行集成测试编写起来要快得多,并且还可以测试组件是否实际协同工作。单元测试新颖的“算法”左右似乎要容易得多。单元测试服务类它只是感觉错误和无用。

我正在使用 mockito 来模拟 spring 数据存储库(因此是数据库访问)。问题是,如果我告诉模拟存储库在方法调用 getById 上返回实体 A,它显然会返回它,并且服务也会返回它。是的,该服务做了一些额外的事情,但非常小的事情,比如加载惰性集合(来自 hibernate )。显然我在单元测试中没有任何惰性集合(代理)。

例子:

@Test
public void testGetById() {
System.out.println("getById");
TestCompound expResult = new TestCompound(id, "Test Compound", "9999-99-9", null, null, null);

TestCompoundRepository mockedRepository = mock(TestCompoundRepository.class);
when(mockedRepository.findOne(id)).thenReturn(expResult);

ReflectionTestUtils.setField(testCompoundService, "testCompoundRepository",
mockedRepository, TestCompoundRepository.class);

TestCompound result = testCompoundService.getById(id);
assertEquals(expResult, result);
}

万岁,其余的都成功了。多么惊喜!不是真的没有。

有人可以向我解释我做错了什么吗?否则这种测试的意义何在?我的意思是我告诉返回 expResult 然后它被返回。哇。多么惊喜!感觉就像我在测试 mockito 是否有效,而不是我的 Service。

编辑:

如果出现一些愚蠢的错误,我看到的唯一好处就是在此处留下不需要的行,将返回值设置为 null 或类似的愚蠢。这种情况将被单元测试捕获。 “返回-努力”比似乎仍然很糟糕?

最佳答案

问题可能有点老,但我会回答以防有人偶然发现。

  • 我正在使用 Mockito 和 JUnit。
  • AccountRepository 是一个扩展 JPARepository 的普通 Spring 数据存储库。
  • Account 是一个普通的 JPA 实体。

要测试您的服务和模拟 Spring Data 存储库,您需要以下内容。

package foo.bar.service.impl;

import foo.bar.data.entity.Account;
import foo.bar.data.repository.AccountRepository;
import foo.bar.service.AccountService;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;

@RunWith(MockitoJUnitRunner.class)
public class AccountServiceImplTest {

@Mock
private static AccountRepository accountRepository;

@InjectMocks
private static AccountService accountService = new AccountServiceImpl();

private Account account;

@Test
public void testFindAccount() {

Integer accountId = new Integer(1);

account = new Account();
account.setId(accountId);
account.setName("Account name");
account.setCode("Accont code");
account.setDescription("Account description");

Mockito.when(accountRepository.findOne(accountId)).thenReturn(account);

Account retrivedAccount = accountService.findAccount(accountId);

Assert.assertEquals(account, retrivedAccount);

}

}

关于java - Spring 数据: Service layer unit testing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15437310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com