Spock datatable просто принимает целые числа во входах Speck - PullRequest
0 голосов
/ 04 октября 2019

Я работаю над переносом большого приложения с Grails 3.3 на Grails 4.

Одна из проблем, которые мы получили, связана со Spock, функциональность, которую мы использовали в Grails 3.39, кажется, отсутствует: при использовании таблицы данных для представления спецификаций столбец для входных данных, кажется, принимает значения jus целых чисел

В приведенном ниже коде только первая строка пятнышек передает текст. Нет следующих двух, так как спок преобразуется в целое число, перед тем как передать его в Math.round(value)

import spock.lang.*

@Unroll
 void 'test to demostrate Spock is just accepting integer in datatable column value'() {
   expect:
       Math.round(value) == result   
   where:
   value     | result
   1234      | 1234
   4321.56d  | 4322d
   1111.56f  | 1112d
 }

Я не замечал эту проблему в версии 3.3 Grails.

Заранее спасибо запосетить эту проблему

Хуан

ОБНОВЛЕНИЕ:

ОБНОВЛЕНИЕ:

Описанное изменение поведения действительно происходит, когда тесту на основе данных предшествуеттест, который включает в себя выбрасывание исключения

РАБОЧАЯ ВОКРУГ:

Переместить тест, который включает в себя исключение, в качестве последнего теста.

1 Ответ

0 голосов
/ 04 октября 2019

Grails 4 использует org.spockframework: spock-core: 1.2-groovy-2.5 , и в этой версии он работает должным образом (как и в других версиях Spock).

Обновите вашспецификация следующим образом:

import spock.lang.Specification
import spock.lang.Unroll

class RoundSpec extends Specification {
    @Unroll
    void 'Math.round(#value) == #result'() {
        setup:
        println "$value as ${value.class}"

        expect:
        Math.round(value) == result

        where:
        value    || result
        1234     || 1234
        4321.56d || 4322
        1111.56f || 1112
    }
}

Затем вы можете видеть, что все тестовые примеры проходят тест, и вы также можете видеть в выходных данных, какие данные какого класса переданы в тест:

enter image description here

Итак, Integer, Double и Float пропущены, а не Integer во всех случаях, как вы пишете.

Что я могуПосмотрите в своем тесте, что у вас есть значение result как Double два раза, но Math.round() каждый раз возвращает длинное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...