Я уверен, что это довольно распространенная ситуация. Я использую плагин Spring Security Core и хочу создать модель домена, в которой Person ограничен определенными ролями:
class Workgroup {
Person manager
...
static constraints = {
manager(validator: {mgr ->
// it feels like there should be a more elegant, groovy way of doing this.
def auths = mgr.getAuthorities();
def returny = false
auths.each {
if(it.authority == 'ROLE_MANAGER')
{
returny = true
}
}
return returny
})
}
}
Этот тест проваливается как mofo:
void testInvalidManager() {
def nick = new Person(username:'Nick')
def nonManagerRole = new Role(authority:'ROLE_EMPLOYEE')
UserRole.create(nick,nonManagerRole)
def awesome = new Workgroup(name:'mooCows', manager:nick)
mockForConstraintsTests(Workgroup, [awesome])
assertFalse awesome.validate()
assertEquals "validator", awesome.errors["manager"]
}
testInvalidManager Ошибка Нет подписи метода: users.UserRole.save () применима для типов аргументов: (java.util.LinkedHashMap) значения: [[flush: false, insert: true]] Возможные решения: wait (), any (), wait (long), use ([Ljava.lang.Object;), isCase (java.lang.Object), каждый (groovy.lang.Closure)
groovy.lang.MissingMethodException: Нет сигнатуры метода: users.UserRole.save () применим к типам аргументов: (java.util.LinkedHashMap) значения: [[flush: false, insert: true]]
Возможные решения: wait (), any (), wait (long), use ([Ljava.lang.Object;), isCase (java.lang.Object), каждый (groovy.lang.Closure)
at users.UserRole.create (UserRole.groovy: 32)
at users.UserRole.create (UserRole.groovy)
at users.UserRole $ create.call (Неизвестный источник)
at users.WorkgroupTests.testInvalidManager (WorkgroupTests.groovy: 17)
Это лучше охватывается интеграцией, чем модульным тестированием? Нужно ли издеваться над UserRole (если да, то как?)? Как обычно проводятся тесты такого типа?