如何模拟存储库 Spring
How to mock repository Spring
我的测试 class 看起来是这样的,我尝试模拟存储库到 return 真实对象列表。
在调试中,我看到模拟存储库的哈希值和测试期间服务的存储库的哈希值相同。 None尽管如此,我还是收到空的 ArrayList
。
None 之前的答案,如 this or 等对我有帮助。
@RunWith(SpringRunner.class)
@SpringBootTest
class MyServiceTest {
@Mock
private BasicStuffRepository<Stuff> stuffRepository;
@Autowired
private MyService myService;
@Test
void run() {
// mock
var mockObject1 = new Stuff();
var mockObject2 = new Stuff();
var mockObject3 = new Stuff();
var mockObject4 = new Stuff();
List<Stuff> mockStuff = Stream.of(mockObject1, mockObject2, mockObject3, mockObject4).collect(Collectors.toList());
when(stuffRepository.findAll()).thenReturn(mockStuff);
// run
myService.run();
}
}
@Service
@RequiredArgsConstructor
public class MyService {
private final BasicStuffRepository<Stuff> stuffRepository;
public void run() {
stuffRepository.findAll().stream() ....
}
}
看起来你应该在测试中使用@MockBean 而不是@Mock class。
MockBean 用于将模拟添加到 Spring ApplicationContext,而不仅仅是“模拟”真实对象。
我的测试 class 看起来是这样的,我尝试模拟存储库到 return 真实对象列表。
在调试中,我看到模拟存储库的哈希值和测试期间服务的存储库的哈希值相同。 None尽管如此,我还是收到空的 ArrayList
。
None 之前的答案,如 this or
@RunWith(SpringRunner.class)
@SpringBootTest
class MyServiceTest {
@Mock
private BasicStuffRepository<Stuff> stuffRepository;
@Autowired
private MyService myService;
@Test
void run() {
// mock
var mockObject1 = new Stuff();
var mockObject2 = new Stuff();
var mockObject3 = new Stuff();
var mockObject4 = new Stuff();
List<Stuff> mockStuff = Stream.of(mockObject1, mockObject2, mockObject3, mockObject4).collect(Collectors.toList());
when(stuffRepository.findAll()).thenReturn(mockStuff);
// run
myService.run();
}
}
@Service
@RequiredArgsConstructor
public class MyService {
private final BasicStuffRepository<Stuff> stuffRepository;
public void run() {
stuffRepository.findAll().stream() ....
}
}
看起来你应该在测试中使用@MockBean 而不是@Mock class。
MockBean 用于将模拟添加到 Spring ApplicationContext,而不仅仅是“模拟”真实对象。