0

GroovyTestCase2 つのテスト メソッドで拡張された Grails 統合テストがあります。最初のメソッドは正常に実行されますが、2 番目のメソッドは次のエラーで失敗しますgroovy.lang.MissingMethodException

失敗: testMapBudgetFailure(com.ross.budget.BudgetServiceTests)
groovy.lang.MissingMethodException: メソッドのシグネチャがありません:
com.ross.budget.Budget.save() は引数の型に適用できます: () 値: [] 可能な解決策: 保存()、save(boolean)、save(java.util.Map)、wait()、last()、any()
at com.ross.budget.BudgetServiceTests.testMapBudgetFailure(BudgetServiceTests.groovy:45)

まったく同じメソッド呼び出しb.save()が最初のメソッドにありますが。最初のメソッドにコメントすると、2 番目のテストは期待どおりに実行されます。 2 つのテスト メソッドの動作が異なるのはなぜですか?

全クラスのリスト:

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)

    }
}

私はコードがコピーペーストであり、素敵ではないことを知っています. これは、個人的なプロジェクトの簡単なテスト ケースです。

4

1 に答える 1

1

Grails docによると、両方ではなく@TestFor、単体テストに使用するかGroovyTestCase、統合テストに拡張する必要があります。

于 2012-11-13T13:13:34.223 に答える