2012-11-11 6 views
0

У меня есть интеграционный тест Grails, который распространяет GroovyTestCase с двумя методами тестирования. Первый метод успешно не выполняется, но второй не может с groovy.lang.MissingMethodException:Почему класс домена ведет себя по-разному в двух разных методах одного и того же GroovyTestCase?

Failure: testMapBudgetFailure (com.ross.budget.BudgetServiceTests)
groovy.lang.MissingMethodException: Нет подписи метода:
com.ross .budget.Budget.save() применим для типов аргументов:() значения: [] Возможные решения: save(), save (boolean), save (java.util.Map), wait(), last(), любой()
на com.ross.budget.BudgetServiceTests.testMapBudgetFailure (BudgetServiceTests.groovy: 45)

Даже при том, что тот же метод вызова b.save() находится в первом методе. Если я комментирую первый метод, второй тест выполняется, как ожидалось. Почему два метода тестирования ведут себя по-другому?

Полный список класса:

package com.ross.budget 



import grails.test.mixin.* 
import org.junit.* 

/** 
* See the API for {@link grails.test.mixin.services.ServiceUnitTestMixin} for usage instructions 
*/ 
@TestFor(BudgetService) 
class BudgetServiceTests extends GroovyTestCase { 


    BudgetService budgetService 

    void testMapBudgetSuccess() { 
     Budget b = new Budget() 
     b.month = new Date(2012, 9, 1) 
     b.amount = new BigDecimal(10.0) 
     b.save() 

     Account a = new Account() 
     a.name = "Test" 
     a.institution = "Test" 
     a.description = "Test Account" 
     a.save() 

     Transaction t = new Transaction() 
     t.account = a 
     t.postDate = new Date(2012, 9, 5) 
     t.amount = 10.0 
     t.save() 

     boolean result = budgetService.mapTransaction(t) 
     assertTrue("Returned failed match.", result) 
     assertNotNull("No budget set", t.budget) 

    } 

    void testMapBudgetFailure() { 
     Budget b = new Budget() 
     b.month = new Date(112, 5, 1) 
     b.amount = new BigDecimal(10.0) 
     b.save() 

     Account a = new Account() 
     a.name = "Test" 
     a.institution = "Test" 
     a.description = "Test Account" 
     a.save() 

     Transaction t = new Transaction() 
     t.account = a 
     t.postDate = new Date(112, 6, 5) 
     t.amount = 10.0 
     t.save() 

     boolean result = budgetService.mapTransaction(t) 
     assertFalse("Returned match.", result) 
     assertNull("Budget set", t.budget) 

    } 
} 

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

+0

Насколько я понимаю из документов, вы должны либо использовать '@ TestFor', либо расширять его из' GroovyTestCase', а не как –

+0

Очень странно, можете ли вы опубликовать код классов домена? –

+0

работает, если вы удаляете аннотацию '@TestFor (...)'? –

ответ

1

Согласно Grails doc, вы должны либо использовать @TestFor для юнит-теста или продлить GroovyTestCase для интеграционного теста, а не как.

+0

Спасибо за помощь Денис! –

 Смежные вопросы

  • Нет связанных вопросов^_^