unit-testing - Spring Boot 应用程序中存储库的单元测试用例
问题描述
我对 UnitTest 和集成测试有点困惑 我知道下面的代码是集成测试
@RunWith(SpringRunner.class)
@SpringBootTest(classes = LavaMasterApplication.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class CurrencyServiceImplTest {
@Autowired
private CurrencyService currencyService;
static CurrencyDTO currencyDTO = new CurrencyDTO();
@BeforeClass
public static void setUp() {
currencyDTO.setCode("INR");
currencyDTO.setName("Indian Rupee");
currencyDTO.setNumber(12);
}
@Test
public void testA_addCurrency() {
CurrencyDTO dto = currencyService.addCurrency(currencyDTO);
assertThat(dto).isEqualTo(currencyDTO);
}
}
我如何为存储库或服务等相同的方法编写单元测试用例。我尝试使用以下无效的代码段。
@RunWith(MockitoJUnitRunner.class)
public class CurrencyServiceImplUT {
@Mock
CurrencyRepository repository;
@Test
public void testA_addCurrency() {
Currency currency = new Currency();
currency.setCode("IND");
currency.setName("INDIA");
currency.setNumber(1);
// CurrencyRepository currencyRepository = mock(CurrencyRepository.class);
when(repository.save(currency)).thenReturn(currency);
List<Currency> all = repository.findAll();
when(repository.findAll()).thenReturn(null);
}
}
上面的代码不起作用,它在保存实体后返回 null 并且 findAll() 也为 null。
我需要为存储库和服务编写单元测试用例
解决方案
我不知道CurrencyService
您在向我们展示的单元测试示例中做了什么以及您尝试做什么,但是集成测试的等效单元测试将类似于:
public class CurrencyServiceTest {
@Mock
CurrencyRepository repository; // mock the repository
@InjectMocks
CurrencyService service; // use the real implementation and inject the @Mock's on it
@Test
public void testA_addCurrency() {
Currency currency = new Currency();
currency.setCode("IND");
currency.setName("INDIA");
currency.setNumber(1);
when(repository.save(currency)).thenReturn(currency); //mocking the repository return
CurrencyDTO currencyDTO = new CurrencyDTO();
currencyDTO.setCode("INR");
currencyDTO.setName("Indian Rupee");
currencyDTO.setNumber(12);
CurrencyDTO dto = currencyService.addCurrency(currencyDTO);
assertThat(dto).isEqualTo(currencyDTO);
}
}
正如我所说,我不知道这个测试对你是否有意义,但你的单元测试应该遵循这种代码。
推荐阅读
- reactjs - 更新动态加载的字段
- fusioncharts - 如何更改 FusionCharts 中时序图的主题?
- react-native - 为什么 componentWillUnmount() 不起作用?
- r - 如何在 R 中按组从开始日期开始丢弃超过一定时间滞后的行?
- python-3.x - 当被问及是否要重试时,用户回答“是”后,如何让该功能以新值重新启动?
- sql-server - SQL Server 仅强制 RowLock
- arrays - 如何访问和遍历散列中的数组
- python - 无法弄清楚无限循环的原因
- excel - 隐藏 Powershell 窗口以防止弹出 | VBA
- c# - 剃须刀页面核心 2.2 中的路由与模型绑定不正确的模型绑定