2015-02-20 1 views
0

Я вижу странное поведение в тесте 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 от службы , используя транзакционное статическое поле, а также не используя ни одно из них. Я также попытался изменить метод службы на закрытие, и все это не повезло.

+0

перейти к 'service.createOrder()' и посмотреть, что там не так, если у вас есть какие-либо ошибки, добавьте их в исходное сообщение – roeygol

+0

createOrder создает Заказ, как ожидалось. Первый фрагмент, который я опубликовал, призван продемонстрировать это. Я отлаживал метод проверки для проверки. Кроме того, в настройке теста у меня есть следующее, чтобы не сохранять информацию о заказе между тестами: 'def errors = [:] \t \t MockUtils.mockDomain (Order, errors, [])' – AlowishusDevedanderAbercrombie

+0

run: ' grails clean' или что-то в этом роде и посмотреть, что произойдет – roeygol

ответ

1

Я изменил метод обслуживания на закрытие, очистил мои целевые каталоги, сделал всевозможные чистые знания (в рамках команд GGTS и grails), и метод службы начал получать удар в тесте. Однако я все еще не уверен в фактической причине этой ошибки.