保存时测试返回 NULL
test returning NULL when saving
我有这个class:
@Repository
public interface EnfantRepository extends JpaRepository<Enfant, Long> {
..
}
和此服务:
@Transactional
@Service
@Slf4j
public class EnfantService implements IEnfantService {
public Enfant save (Enfant enfant) {
return enfantRepository.save(enfant);
}
}
和这个测试:
@RunWith(MockitoJUnitRunner.class)
public class EnfantServiceTest {
@Mock
private EnfantRepository enfantRepository = mock(EnfantRepository.class);
@InjectMocks
private EnfantService enfantService;
@Test
public void testSave() {
System.out.println(enfantService.save(Enfant.builder().build()));
Assertions.assertThat
(enfantService.save(Enfant.builder().build())).isNotNull();
}
}
但保存后它 return 为空并且测试失败
在 EnfantServiceTest class 中,你嘲笑了 EnfantRepository class 并且没有为模拟 EnfantRepository class 中的方法提供的实现。因此,调用任何方法都会 return null.
这里有两种方式:
- 使用 Mockito 的“when”和“then”模拟的 classEnfantRepository 的保存方法存根。
@RunWith(MockitoJUnitRunner.class)
public class EnfantServiceTest {
@Mock
private EnfantRepository enfantRepository = mock(EnfantRepository.class);
@InjectMocks
private EnfantService enfantService;
@Test
public void testSave() {
System.out.println(enfantService.save(Enfant.builder().build()));
when(enfantRepository.save(any()).thenReturn(Long.of(1));
Assertions.assertThat
(enfantService.save(Enfant.builder().build())).isNotNull();
}
}
But this wont be a good way of testing the repository code. Rather,
- 为您的测试环境使用像
H2
这样的内存数据库,在这种情况下无需模拟存储库 class。
在 运行 测试时,Spring 将启动 H2 数据库,然后它将连接到该数据库并从您的实体 class 创建表并对该数据库执行所有查询。这将确保您的代码端到端按预期工作。
我有这个class:
@Repository
public interface EnfantRepository extends JpaRepository<Enfant, Long> {
..
}
和此服务:
@Transactional
@Service
@Slf4j
public class EnfantService implements IEnfantService {
public Enfant save (Enfant enfant) {
return enfantRepository.save(enfant);
}
}
和这个测试:
@RunWith(MockitoJUnitRunner.class)
public class EnfantServiceTest {
@Mock
private EnfantRepository enfantRepository = mock(EnfantRepository.class);
@InjectMocks
private EnfantService enfantService;
@Test
public void testSave() {
System.out.println(enfantService.save(Enfant.builder().build()));
Assertions.assertThat
(enfantService.save(Enfant.builder().build())).isNotNull();
}
}
但保存后它 return 为空并且测试失败
在 EnfantServiceTest class 中,你嘲笑了 EnfantRepository class 并且没有为模拟 EnfantRepository class 中的方法提供的实现。因此,调用任何方法都会 return null.
这里有两种方式:
- 使用 Mockito 的“when”和“then”模拟的 classEnfantRepository 的保存方法存根。
@RunWith(MockitoJUnitRunner.class)
public class EnfantServiceTest {
@Mock
private EnfantRepository enfantRepository = mock(EnfantRepository.class);
@InjectMocks
private EnfantService enfantService;
@Test
public void testSave() {
System.out.println(enfantService.save(Enfant.builder().build()));
when(enfantRepository.save(any()).thenReturn(Long.of(1));
Assertions.assertThat
(enfantService.save(Enfant.builder().build())).isNotNull();
}
}
But this wont be a good way of testing the repository code. Rather,
- 为您的测试环境使用像
H2
这样的内存数据库,在这种情况下无需模拟存储库 class。 在 运行 测试时,Spring 将启动 H2 数据库,然后它将连接到该数据库并从您的实体 class 创建表并对该数据库执行所有查询。这将确保您的代码端到端按预期工作。