Как мне добавить другую услугу в Grails UnitTest (Specification) с помощью Spock?Grails Spock Mock Injected Service in Unit Test
class ServiceOne {
ServiceTwo serviceTwo
ModelOne getMethodOne(String name) {
// do somethings here
return serviceTwo.getMethodTwo(name)
}
}
class ServiceTwo {
ServiceTwo serviceTwo
ModelOne getMethodTwo(String name) {
// do somethings here
return ModelOne.get(name)
}
}
// Tests
import grails.test.mixin.Mock
import grails.test.mixin.TestFor
import spock.lang.Specification
/**
* Tests for ServiceOne
*/
@TestFor(ServiceOne)
@Mock(ModelOne)
class ServiceOneSpec extends Specification {
/** Inject serviceTwo in here
Otherwise the following exception is thrown
java.lang.NullPointerException: Cannot invoke method getMethodTwo() on null object
*/
void "test method one"() {
when:
ModelOne modelOne = service.getMethodOne(name)
then:
modelOne != null
}
}
Службы, не будет автоматически проводятся в спецификациях единиц, поэтому 'SeviceTwo' должно быть издевательствовано в тесте, чтобы сделать его доступным для' ServiceOne'. Попробуйте 'service.serviceTwo = Mock (ServiceTwo)' in 'given:' block или 'setup()' в тесте. – dmahapatro