Я вижу странное поведение в тесте spock для службы с использованием Grails 2.3.7.Тест-драйв Grails spock service, не вызывающий метод обслуживания
Этот тест работает отлично:
void "create spot order"() {
given:
def createOrderCommand = newCreateOrderCommand(OrderType.S)
when:
def orderId = service.createOrder(createOrderCommand, user).id.toInteger()
then:
Order.count() == 1
when:
def order = service.orderById(orderId)
then:
// a bunch of assertions
}
Этот тест также работает отлично:
void "create command with invalid order id"() {
when:
service.commandForOrderId(999)
then:
def exception = thrown(CreateOrderException)
exception.key == "orderService.invalid.order.id"
}
Однако этот тест не пройден - я поставил точку останова в начале commandForOrderId, и он никогда не ударил , Команда является нулевым (это когда тест не пройден, на линии проверки на нуль по команде), который никогда не будет возвращен из этого метода обслуживания:
void "create spot command"() {
given:
def createOrderCommand = newCreateOrderCommand(OrderType.S)
when:
def order = service.createOrder(createOrderCommand, user)
then:
Order.count() == 1
when:
def orderId = order.id.toInteger()
def command = service.commandForOrderId(orderId)
then:
command
// a bunch more assertions
}
Я попытался удалить аннотацию @Transactional от службы , используя транзакционное статическое поле, а также не используя ни одно из них. Я также попытался изменить метод службы на закрытие, и все это не повезло.
перейти к 'service.createOrder()' и посмотреть, что там не так, если у вас есть какие-либо ошибки, добавьте их в исходное сообщение – roeygol
createOrder создает Заказ, как ожидалось. Первый фрагмент, который я опубликовал, призван продемонстрировать это. Я отлаживал метод проверки для проверки. Кроме того, в настройке теста у меня есть следующее, чтобы не сохранять информацию о заказе между тестами: 'def errors = [:] \t \t MockUtils.mockDomain (Order, errors, [])' – AlowishusDevedanderAbercrombie
run: ' grails clean' или что-то в этом роде и посмотреть, что произойдет – roeygol