Groovy - Типовое тестирование? - PullRequest
2 голосов
/ 30 августа 2010

Я действительно новичок в Groovy и пытаюсь что-то сделать. Я написал код Groovy (который работает просто отлично), который получает текст. Этот текст должен быть целым числом (от 0 до 10). Может случиться так, что пользователь вводит что-то другое. В этом случае я хочу сделать определенную обработку ошибок.

Теперь мне интересно, каков наилучший / самый лучший способ проверить, можно ли привести строковую переменную к целому числу?

(что я хочу сделать, так это либо потребить целое число в строке, либо установить результат моих вычислений на 0.

Спасибо!

Ответы [ 5 ]

6 голосов
/ 30 августа 2010

В классе String есть метод isInteger(), который вы можете использовать:

def toInteger (String input) {
    if (input?.isInteger()) {
        return input.toInteger()
    }
    return 0
}
2 голосов
/ 31 августа 2010

Использование Groovy содержит

if ( x?.isInteger()) {
    return (0..10).contains(x) 
} else {
    return false
}
0 голосов
/ 31 августа 2010

У вас есть тег grails в вашем вопросе, поэтому, если вы используете Grails, вы можете рассмотреть возможность сделать его целочисленным свойством в доменном классе. Параметр может быть представлен как текст, но вы можете привязать его к целочисленному свойству со значением по умолчанию 0:

class MyDomain {
  Integer whatever = 0

  static constraints = {
    whatever( min:0, max:10)
  }
}
0 голосов
/ 31 августа 2010

Есть много способов сделать это в Groovy, если вы знакомы с регулярными выражениями, это примерно так кратко, как вы можете получить:

def processText(String text) {
    text ==~ /(10|\d)/ ? text.toInteger() : 0
}

assert 0 == processText("-1")
(0..10).each { 
    assert it == processText("$it") 
}
assert 0 == processText("11")

Я немного не уверен, чтоВы имеете в виду «обработку специфических ошибок», если пользователь делает что-то другое.

Если это веб-приложение, я бы посмотрел на элементы grails и ограничения, которые вы можете наложить на поля объекта домена, что позволит вам легко выразить то, что вы пытаетесь сделать.

0 голосов
/ 30 августа 2010

Это то, что вы говорите?

  Integer integer = 0
  try {
    integer = (Integer) string
    assert integer > 0
    assert integer < 10
  catch(e) {
    integer = 0
  }
...