У вас есть два варианта
- Используйте Groovy классы насмешек, то есть
MockFor
и StubFor
- Используйте фиктивные классы Grails, вызвав метод
mockFor
для GrailsUnitTestCase
. Класс, возвращаемый этим методом, является экземпляром GrailsMock
Лично я обнаружил, что фиктивные объекты Groovy более надежны, чем макеты Граилса. Иногда я обнаруживал, что мои фиктивные объекты Grails обходились, хотя я, казалось, все правильно настраивал.
Вот пример использования макетов Groovy:
void testCreateSuccess() {
def controller = new CareersController()
// Create a mock for the JobService implementation class
def mockJobServiceFactory = new MockFor(JobService)
mockJobServiceFactory.demand.getJob {def id ->
// Return the instance of JobIF that is used when the mock is invoked
return new Job(title: "architect")
}
// Set the controller to use the mock service
controller.jobService = mockJobServiceFactory.proxyInstance()
// Do the test
controller.params.id = 12
def model = controller.workActivities()
assertEquals "Architect", model["career"].getTitle()
}
Процесс в основном такой же, когда используется макеты Grails, но вы вызываете метод mockFor
тестового класса вместо создания экземпляра MockFor
.