java - 带有 Spring-boot stub 的 Spock 无法正常工作

标签 java spring-boot testing spock

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

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

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)

最佳答案

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

关于java - 带有 Spring-boot stub 的 Spock 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56691847/

相关文章:

c - 测试 C 中的指针函数

R ggplot2 - 在一个方面对每对执行成对测试并使用 ggsignif 显示 p 值

java - Spring Security服务配置

java - 什么是 Apache Camel bean?

database - 数据库查询价格的方法

java - 如何在 jpa 查询中使用自定义函数?

apache-flex - 哪些选项可用于使用 Perl 测试 flex/flash?

java - new View.OnClickListener(){} 类型中的 onClick(View, String) 方法永远不会在本地使用

java - Appium错误packageAndLaunchActivityFromManifest失败

java - Spring Boot中跨子域共享cookie