gpt4 book ai didi

java - 如何使用 Spock 在 Spring Boot 过滤器中模拟服务或 stub 服务方法?

转载 作者:行者123 更新时间:2023-11-28 21:29:17 25 4
gpt4 key购买 nike

目前我的 Spring Boot 应用程序中有一个过滤器,它使用 Spring 服务来完成一些繁重的工作。

public class HmacAuthenticationFilter implements Filter {

@Autowired
MyService myservice

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
myservice.callMethod();
}
}

在我的 Spock 测试中,我想模拟过滤器使用的整个服务或 stub myservice.callMethod();返回特定值。

关于如何做到这一点的任何提示?

最佳答案

可以使用 HotSwappableTargetSource 来完成

@WebAppConfiguration
@SpringApplicationConfiguration(TestApp)
@IntegrationTest('server.port:0')

class HelloSpec extends Specification {

@Autowired
@Qualifier('swappableHelloService')
HotSwappableTargetSource swappableHelloService

def "test mocked"() {
given: 'hello service is mocked'
def mockedHelloService = Mock(HelloService)
and:
swappableHelloService.swap(mockedHelloService)

when:
//hit endpoint
then:
//asserts
and: 'check interactions'
interaction {
1 * mockedHelloService.hello(postfix) >> { ""Mocked, $postfix"" as String }
}
where:
postfix | _
randomAlphabetic(10) | _
}
}

这是 TestApp(覆盖你想用代理模拟的 bean)

class TestApp extends App {

//override hello service bean
@Bean(name = HelloService.HELLO_SERVICE_BEAN_NAME)
public ProxyFactoryBean helloService(@Qualifier("swappableHelloService") HotSwappableTargetSource targetSource) {
def proxyFactoryBean = new ProxyFactoryBean()
proxyFactoryBean.setTargetSource(targetSource)
proxyFactoryBean
}

@Bean
public HotSwappableTargetSource swappableHelloService() {
new HotSwappableTargetSource(new HelloService());
}
}

看看这个例子https://github.com/sf-git/spock-spring

关于java - 如何使用 Spock 在 Spring Boot 过滤器中模拟服务或 stub 服务方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29285545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com