我在配置中有一個模擬 bean:
@Profile('test')
@Configuration
class TestSecurityConfig {
private final mockFactory = new DetachedMockFactory()
@Primary @Bean
AuthUserDetailsProvider authUserDetailsProvider() {
mockFactory.Stub(AuthUserDetailsProvider)
}
}
默認情況下,我模擬setup()所有測驗的方法呼叫是方法。
def setup() {
authProvider.authenticationPrincipal >> random(authUserDetails)
}
通過在特定測驗中,我需要覆寫方法模擬
def 'exercise missed user processing'() {
given: 'no user data'
authProvider.authenticationPrincipal >> emptyUser
...
}
但它不起作用。如何覆寫 Spock 中的模擬方法?有沒有辦法手動重置模擬攔截?
uj5u.com熱心網友回復:
對于前一個塊,then塊中定義的互動將優先于given/ 中定義的互動。通常,您將它們與斷言配對,即,但它也適用于普通存根。setupwhen1 * ...
import spock.lang.*
class ASpec extends Specification {
List myList = Mock()
def setup() {
myList.get(0) >> 1
}
def "default behavior"() {
expect:
myList.get(0) == 1
}
def "override behavior"() {
when:
def result = myList.get(0)
then:
myList.get(0) >> 42
result == 42
}
}
所以在你的情況下:
def 'exercise missed user processing'() {
when:
...
then:
1 * authProvider.authenticationPrincipal >> emptyUser
...
}
uj5u.com熱心網友回復:
但它不起作用?
無論您在 setup 中放入什么,都將在每次測驗之前執行。如果您不希望那樣,那么代碼可能不應該在設定中。
如何覆寫 Spock 中的模擬方法?
如果“覆寫”是指撤消安裝程式中所做的事情,然后再做其他事情,我不知道有什么方法可以做到這一點。
有沒有辦法手動重置模擬攔截?
不是我所知道的。告訴模擬你想要某種行為,然后告訴模擬你改變了主意,這是不尋常的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/360616.html
