如何模拟存储库 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,而不仅仅是“模拟”真实对象。