【问题标题】:Spock with Spring-boot stubbing doesn't work correctly带有 Spring-boot 存根的 Spock 无法正常工作
【发布时间】:2019-06-20 18:21:54
【问题描述】:

我想在 Spring Boot 项目中编写 spock 单元测试。当我尝试存根存储库时,它无法正常工作。

我调试它,在测试方法中存根看起来正确,返回预期结果。但是当我们在服务类eventMemberService.eventMembers 上调用方法时,它返回的不是来自存根的“真实”数据......有什么问题?

import com.ostrouchprzemyslaw.willyoube.repositories.EventMemberRepository
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import spock.lang.Shared
import spock.lang.Specification

@SpringBootTest
class EventMemberServiceImplTest extends Specification {

    @Shared
    EventMember eventMember

    @Autowired
    EventMemberService eventMemberService

    EventMemberRepository eventMemberRepository = Stub(EventMemberRepository.class)

    def setupSpec(){
        eventMember = new EventMember()
        eventMember.firstName = 'Przemek'
        eventMember.lastName = 'Ostrouch'
        eventMember.email = 'przemek@gmail.com'
    }

    def "When call getEventMembers it list all members"() {

        given:
        def mockListOfMembers = new ArrayList<EventMember>()
        mockListOfMembers.add(eventMember)

        when:
        eventMemberRepository.findAll() >> mockListOfMembers
        def result = eventMemberService.eventMembers

        then:
        result == mockListOfMembers
    }
public class EventMemberServiceImpl implements EventMemberService {

    private EventMemberRepository eventMemberRepository;

    public EventMemberServiceImpl(EventMemberRepository eventMemberRepository) {
        this.eventMemberRepository = eventMemberRepository;
    }

    @Override
    public List<EventMember> getEventMembers() {
        List<EventMember> returnList = new ArrayList<>();
        eventMemberRepository.findAll().forEach(returnList::add);
        return returnList;
    }

Expected result: eventMemberService.eventMembers will return list with one eventMember, but actual result is empty list (there are no any data in DB)

【问题讨论】:

    标签: java spring-boot testing spock


    【解决方案1】:

    EventMemberService 不是模拟,你在期待什么?也许您忘记将存储库存根注入该服务。如果你这样做,它应该工作。 ;-)

    【讨论】:

    • 是的,当然,愚蠢的错误。我忘记向服务“注入”存根存储库...我试图测试EventMemberService 我不应该@Autowire 它,只需通过新建创建并通过构造函数添加此存储库。
    猜你喜欢
    • 2019-08-06
    • 2018-08-25
    • 2018-06-01
    • 2021-02-03
    • 1970-01-01
    • 2017-05-18
    • 2020-02-22
    • 2016-06-25
    • 2021-11-02
    相关资源
    最近更新 更多