【问题标题】:How to mock repository Spring如何模拟存储库 Spring
【发布时间】:2022-01-25 05:07:50
【问题描述】:

我的测试类看起来是这样的,我尝试模拟存储库以返回真实对象的列表。

在调试中,我看到模拟存储库和服务存储库在测试期间的哈希值是相同的。尽管如此,我还是收到了空的ArrayList

thisthis 等之前的答案都没有帮助我。

@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() ....
    }
}

【问题讨论】:

  • 哈希值相同是好的;问题是它们是模拟的哈希值还是实际实例的哈希值(尽管我同意它看起来应该是模拟的)?在 MyService.run 中,你能确认它是哪种类型吗?

标签: java spring spring-boot mocking mockito


【解决方案1】:

看起来你应该在测试类中使用@MockBean 而不是@Mock。

MockBean 用于向 Spring ApplicationContext 添加模拟,而不仅仅是“模拟”一个真实的对象。

【讨论】:

    猜你喜欢
    • 2017-04-30
    • 1970-01-01
    • 2019-11-20
    • 2018-10-24
    • 2022-12-11
    • 2014-05-26
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    相关资源
    最近更新 更多