DBUnit plugin для Grails оказался не без изъяна. Две вещи раздражают :
1. Только plain данные можно описать в датасетах. Это очень плохо. Возможно я просто не нашёл как по другому.
2. Почему-то каждый раз при запуске теста происходит полная перекомпиляция, а это очень долго.
Возможно, не стоит использовать DBUnit, потому что, учитывая синатксис Groovy, создание данных для тестиварония простая задача.
вторник, 29 апреля 2008 г.
среда, 23 апреля 2008 г.
пятница, 11 апреля 2008 г.
grails: unit testing
Пришлов время пописать юнит тесты. Юнит тестировал я один из методов сервиса, который проверяет может ли пользователь видеть урл или нет.
Метод вот такой:
Так как я захотел создать именно юнит тест, то все инжекты из grails необходимо было проэмулировать. А это следующее:
Account.get
объект log
attachedAcc.roles.urls - т.е. свойства roles и urls.
И здесь на выручку приходит динамеческая природа groovy, которая позволяет всё необходимое добавить к классам прямо в run-time.
И так:
1. создаём список аккаунтов, назначем аккаунтам роли, ролям паттерны доступных урлов
2. Добавляем к Account метод get()
3. Добавляем к сервису объект log. Ну и конечно же надо создать сам сервис.
здесь SOL - простейщий класс реализующий метод debug()
Собственно всё, среда готова, можно тестировать.
Метод вот такой:
class SecurityService {
static digestAlgo = "MD5"
boolean checkAccess(def acc, def controller, def action) {
def attachedAcc = Account.get(acc.id)
def checkingUrl = controller + "/" + action
def realRes = false
log.debug "let's check it"
log.debug "attachedAcc : ${attachedAcc}"
log.debug "checkingUrl : ${checkingUrl}"
if(attachedAcc) {
attachedAcc.roles.urls*.find { requestmap ->
if(checkingUrl =~ requestmap.url) {
realRes = true
return true
}
}
}
return realRes
}
...
}
Так как я захотел создать именно юнит тест, то все инжекты из grails необходимо было проэмулировать. А это следующее:
Account.get
объект log
attachedAcc.roles.urls - т.е. свойства roles и urls.
И здесь на выручку приходит динамеческая природа groovy, которая позволяет всё необходимое добавить к классам прямо в run-time.
И так:
1. создаём список аккаунтов, назначем аккаунтам роли, ролям паттерны доступных урлов
def adminRole = new Role()
adminRole['urls'] = [
[url: ".*"],
]
def adminAccount = new Account(username : 'admin')
adminAccount['roles'] = [adminRole]
def oneControllerAllRole = new Role()
oneControllerAllRole['urls'] = [
[url: "one/.*"],
]
def restrictedRole = new Role()
restrictedRole['urls'] = [
[url: "two/three"],
[url: "four/five"]
]
def account1 = new Account(username : 'oneAll')
account1['roles'] = [oneControllerAllRole]
def account2 = new Account(username : 'restricted')
account2['roles'] = [restrictedRole]
def account3 = new Account(username : 'oneAllAndRestricted')
account3['roles'] = [oneControllerAllRole, restrictedRole]
def accounts = [
(new Long(1)) : adminAccount,
(new Long(2)) : account1,
(new Long(3)) : account2,
(new Long(4)) : account3
]
2. Добавляем к Account метод get()
Account.metaClass.static.get = { Long id ->
return accounts[(id)]
}
3. Добавляем к сервису объект log. Ну и конечно же надо создать сам сервис.
def sol = new SOL()
SecurityService.metaClass.getLog = { ->
return sol
}
securityService = new SecurityService()
здесь SOL - простейщий класс реализующий метод debug()
Собственно всё, среда готова, можно тестировать.
пятница, 4 апреля 2008 г.
среда, 2 апреля 2008 г.
Бу-ра-ти-но!!!
Отсюда:
Петр Кузнецов, лидер пензенских сектантов, пытался в среду совершить самоубийство. Об этом по телефону из села Никольское Бековского района сообщил вице-губернатор области Олег Мельниченко.
В ходе следствия выяснилось, что открытую черепно-мозговую травму Кузнецов получил не в результате нападения со стороны сектантов, как сообщалось ранее, а «это была попытка суицида».
«Кузнецов положил голову на деревянный чурбан и наносил себе удары другим деревянным чурбаном. В результате он получил открытую черепно-мозговую травму. Кузнецов был доставлен в Бековскую ЦРБ и экстренно прооперирован. В настоящее время он отправлен в больницу в Пензу для дальнейшего хирургического обследования специалистами», - рассказал Мельниченко.
Петр Кузнецов, лидер пензенских сектантов, пытался в среду совершить самоубийство. Об этом по телефону из села Никольское Бековского района сообщил вице-губернатор области Олег Мельниченко.
В ходе следствия выяснилось, что открытую черепно-мозговую травму Кузнецов получил не в результате нападения со стороны сектантов, как сообщалось ранее, а «это была попытка суицида».
«Кузнецов положил голову на деревянный чурбан и наносил себе удары другим деревянным чурбаном. В результате он получил открытую черепно-мозговую травму. Кузнецов был доставлен в Бековскую ЦРБ и экстренно прооперирован. В настоящее время он отправлен в больницу в Пензу для дальнейшего хирургического обследования специалистами», - рассказал Мельниченко.
Подписаться на:
Сообщения (Atom)