Помещение данных BigDecimal в HSQLDB тестирует использование базы данных DbUnit

Я использую, в спящем режиме JPA в моем бэкенде. Я пишу модульный тест с помощью JUnit и DBUnit для вставки ряда данных в базу данных HSQL в оперативной памяти.

Мой набор данных содержит:

<order_line order_line_id="1" quantity="2" discount_price="0.3"/>

Который отображается на объект OrderLine Java, где discount_price столбец определяется как:

@Column(name = "discount_price", precision = 12, scale = 2)
private BigDecimal discountPrice;

Однако, когда я выполняю свой тестовый сценарий и утверждаю, что возвращенная сниженная цена равняется 0.3, утверждение приводит к сбою и говорит, что хранимая сумма 0. Если я изменяю discount_price в наборе данных, чтобы быть 0.9, он окружает к 1.

Я проверил, чтобы удостовериться, что HSQLDB не делает округления, и это определенно не, потому что я могу ввести объект линии порядка с помощью кода Java со значением как 5,3, и это хорошо работает.

Мне кажется, что DBUtils по некоторым причинам округляет число, которое я определил. Существует ли способ, которым я могу вынудить это не произойти? Кто-либо может объяснить, почему это могло бы делать это?

Спасибо!

5
задан fredt 21 November 2010 в 13:23
поделиться

1 ответ

Я провел быстрый тест на своей стороне с DbUnit 2.2.2, HSQLDB 1.8.0.10 и Hibernate EM 3.4.0.GA, и все работает, как ожидалось:

  • DbUnit правильно вставляет десятичные числа значения в столбце Discount_price типа numeric (12,2)
  • Hibernate правильно считывает значения Discount_price в BigDecimal DiscountPrice
  • следующее assertEquals (0.3d, orderLine.getDiscountPrice (). DoubleValue ()) передает

Итак, у меня следующие вопросы:

  • Какую версию DbUnit вы конкретно используете?
  • Как вы выполняете утверждение точно? Используете ли вы API DbUnit для этого?
0
ответ дан 15 December 2019 в 00:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: