0

最近、Grails 2.0を本格的に試し始めましたが、あまり意味のない障害にぶつかりました。コントローラーに対して@TestForアノテーションを使用する統合テストを作成しましたが、非常に奇妙なエラーが発生します。以下は、この問題を再現する最小限のケースに分解されたテストです。

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

@TestFor(OrderController)
class OrderControllerIntegrationTests {

    public EndUser user

    @Before public void initialize() {
        user = new EndUser(username: UUID.randomUUID().toString(), password: "secret");
        user.save()
    }

    @Test public void get() {
        assert true
    }

    @Test public void create() {
        assert true
    }

}

要約すると、私が得ている出力は、私のテスト設定のsave()メソッドが、このクラスの2番目のテストには存在しないということです。それは...かなり奇妙に思えます。

grailstest-appexampleapp.OrderControllerIntegrationTestsからの完全な出力は次のとおりです。

Testsuite: exampleapp.OrderControllerIntegrationTests
Tests run: 2, Failures: 0, Errors: 1, Time elapsed: 0.769 sec
------------- Standard Output ---------------
--Output from get--
2012-05-15 22:35:03,491 [main] DEBUG transaction.JDBCTransaction  - begin

2012-05-15 22:35:03,493 [main] DEBUG transaction.JDBCTransaction  - current autocommit status: true

2012-05-15 22:35:03,493 [main] DEBUG transaction.JDBCTransaction  - disabling autocommit

2012-05-15 22:35:03,689 [main] DEBUG hibernate.SQL  - insert into widget_user (id, version, password, username, class) values (null, ?, ?, ?, 'exampleapp.EndUser')

2012-05-15 22:35:03,970 [main] DEBUG transaction.JDBCTransaction  - rollback

2012-05-15 22:35:03,970 [main] DEBUG transaction.JDBCTransaction  - re-enabling autocommit

2012-05-15 22:35:03,970 [main] DEBUG transaction.JDBCTransaction  - rolled back JDBC Connection

--Output from create--
2012-05-15 22:35:03,979 [main] DEBUG transaction.JDBCTransaction  - begin

2012-05-15 22:35:03,979 [main] DEBUG transaction.JDBCTransaction  - current autocommit status: true

2012-05-15 22:35:03,979 [main] DEBUG transaction.JDBCTransaction  - disabling autocommit

2012-05-15 22:35:04,207 [main] DEBUG transaction.JDBCTransaction  - rollback

2012-05-15 22:35:04,207 [main] DEBUG transaction.JDBCTransaction  - re-enabling autocommit

2012-05-15 22:35:04,207 [main] DEBUG transaction.JDBCTransaction  - rolled back JDBC Connection

------------- ---------------- ---------------
------------- Standard Error -----------------
--Output from get--
--Output from create--
------------- ---------------- ---------------

Testcase: get took 0.51 sec
Testcase: create took 0.251 sec
    Caused an ERROR
No signature of method: exampleapp.EndUser.save() is applicable for argument types: () values: []
Possible solutions: save(), save(), save(boolean), save(java.util.Map), save(boolean), save(java.util.Map)
groovy.lang.MissingMethodException: No signature of method: exampleapp.EndUser.save() is applicable for argument types: () values: []
Possible solutions: save(), save(), save(boolean), save(java.util.Map), save(boolean), save(java.util.Map)
    at exampleapp.OrderControllerIntegrationTests.initialize(OrderControllerIntegrationTests.groovy:17)

誰かアイデアはありますか?

4

2 に答える 2

0

あなたは@MockEndUserクラスを使用していないので、最初のテストでどのように機能させるのかわかりません。

クラスにアノテーションを追加して、それで修正されるかどうかを確認します。

@TestFor(OrderController)
@Mock([EndUser])
class OrderControllerIntegrationTests{
于 2012-05-16T15:52:33.827 に答える
0

@TestForは、単体テスト専用です。

次のようにして、コントローラーを注入できます。

class OrderControllerIntegrationTests extends GroovyTestCase {
    OrderController orderController
    EndUser user

    @Before
    void initialize() {
        user = new EndUser(username: UUID.randomUUID().toString(), password: "secret");
        user.save()
    }
}
于 2014-03-26T15:13:30.283 に答える