Я пытаюсь написать несколько модульных тестов для проверки объектов Command. Когда мой командный объект имеет много полей с множеством правил проверки, настройка командного объекта для каждого тестового примера становится слишком многословной и повторяющейся.
Скажем, у меня есть этот командный объект:
class MemberCommand {
String title
String name
String phone
static constraints = {
title(blank: false, inList: ["Mr", "Mrs", "Miss", "Ms"])
name(blank: false, maxSize:25)
phone(blank: false, matches: /\d{8}/)
}
}
Я хочу проверить это, сделав что-то вроде этого:
class ValidationTitle extends UnitSpec {
def "title must be one of Mr, Mrs, Miss, Ms"() {
setup:
def memberCommand = new MemberCommand()
// I don't want to do:
// memberCommand.name = "Spock"
// memberCommand.phone = "99998888"
// Instead, I want to disable other constraints, except the one for title
mockForConstraintsTests MemberCommand, [memberCommand]
when:
memberCommand.title = t
then:
memberCommand.validate() == result
where:
t << ["Mr", "Mrs", "Miss", "Ms", "Dr", ""]
result << [true, true, true, true, false, false]
}
}
Этот тест завершится неудачно, потому что при вызове memberCommand.validate () будут использоваться все ограничения, что приведет к ошибке проверки даже в случае, когда тестируется заголовок «Mr». Я мог бы установить имя и телефон для этого одного теста, но тогда мне нужно будет установить заголовок и телефон, когда я тестирую на проверку имени, и заголовок и имя при тестировании на проверку телефона. Вы можете себе представить, насколько это раздражает, когда есть больше полей для объектов команд с более сложными правилами.
Есть ли способ отключить ограничения в модульном тестировании (с помощью Spock) в grails?
Если нет, то какие-нибудь другие предложения для подобных ситуаций?
Спасибо.