找到一個簡單的解決方法來在Spring應用程序中使用Spock模擬對象。在這裏我的Spring配置文件來使用一個模擬的basar豆:
@Configuration @Profile("mocking")
class MockingContext {
@Bean Basar basar(){ new DelegatingBasar() }
}
class DelegatingBasar implements Basar {
@Delegate Basar delegate
}
在這裏,它創建了一個簡單的斯波克規範和使用mock:
@Autowired
Basar basar
Basar basarMock
def setup() {
basarMock = Mock(Basar)
basar.delegate = basarMock;
}
def "create a new seller"(User seller) {
given:
basarMock.findAllUsers() >> []
when:
go "/static/sellers.html"
waitFor { $("#newUser") }
$("#newUser").click()
waitFor { $("#basarNumber") }
$("#basarNumber").value(seller.basarNumber)
$("#name").value(seller.name)
$("#lastname").value(seller.lastname)
$("#email").value(seller.email)
$("#saveUser").click()
waitFor { $("#successfullCreated") }
then:
1 * basarMock.saveUser({ newUser ->
newUser.basarNumber == seller.basarNumber
newUser.name == seller.name
newUser.lastname == seller.lastname
newUser.email == seller.email
})
where:
seller << [ new User(basarNumber: "100", name: "Christian", lastname: "", email: ""),
new User(basarNumber: "ABC", name: "", lastname: "", email: "")]
}
我坐在SpringOne Spock&testMvc sess並且它開始感覺很明顯,爲了混合一些被嘲笑的服務和一些由Spring配置的服務(例如爲了避免在測試之外具有集成邏輯),這個特性將非常有用。 –
也許SpecificationMixin是我在找什麼? –
我對'SpecificationMixin'不熟悉。作品中有一個拉動請求,允許外部建模模擬,並希望它會隨着下一個Spock版本發佈。 –