このエラーは、適切にGORMに登録されていないGORMエンティティとの相互作用によって引き起こされます。このエラーは、対話が開始された場所(「src/groovy
」、「grails-app/services/
」など)とは関係ありません。
必ずしもそうではありませんが、ほとんどの場合、エンティティタイプがGORMに登録されていないテスト環境でこのエラーが発生します。
https://github.com/jeffbrown/illegalaccessgormのプロジェクトを参照してください。そのプロジェクトには次のものが含まれています。
ドメインクラス:
// grails-app/domain/demo/Person.groovy
package demo
class Person {
String name
}
サービス:
// grails-app/services/demo/HelperService.groovy
package demo
class HelperService {
int getNumberOfPeople() {
Person.count()
}
}
ユーティリティクラス:
// src/groovy/demo/SomeHelper.groovy
package demo
class SomeHelper {
int getNumberOfPeople() {
Person.count()
}
}
サービスのためのユニット・テスト:
// test/unit/demo/HelperServiceSpec.grovy
package demo
import grails.test.mixin.TestFor
import spock.lang.Specification
@TestFor(HelperService)
@Mock(Person)
class HelperServiceSpec extends Specification {
void "test gorm method"() {
expect:
service.numberOfPeople == 0
}
}
ユーティリティクラスの
ユニット試験:これらの試験の
// test/unit/demo/SomeHelperSpec.groovy
package demo
import spock.lang.Specification
@Mock(Person)
class SomeHelperSpec extends Specification {
void "test gorm method"() {
given:
def helper = new SomeHelper()
expect:
helper.numberOfPeople == 0
}
}
両方が通過します。あなたがそれらのいずれかから@Mock(Person)
を削除した場合、テストは次のように失敗します。
java.lang.IllegalStateException: Method on class [demo.Person] was used outside of a Grails application. If running in the context of a test using the mocking API or bootstrap Grails correctly.
問題がテスト以外のいくつかの状況で何が起こっている場合は、コンテキストについての詳細を知ることが役立つだろう。その他の疑わしい疑いがあるのは、何らかの理由で正しく初期化されていないJavaエンティティであり、場合によってはプラグインから取り込まれたドメインクラスに問題がある可能性があります。
また、あなたが使用しているGrailsのバージョンが適切であるかもしれません。
私はすべてが意味を成就することを願っています。
あなたはあなたの質問にもっと文脈を提供する必要があります。 'src/groovy'のどこでクラスを使用していますか?何が彼らを呼び、そしてあなたのドメインクラスを呼びますか?あなたがやっていることの実際の例で、あなたの質問にもっと詳しく説明してください。あなたはより良い答えを得るでしょう。 –
インポートcom.chatportal.ShiroUser クラスChatUtility { \t静的主(引数){ \t \tデフchatUtility =新しいChatUtility() \t \t chatUtility?.display(1) \t} \t \t DEFディスプレイ( DEF ID){ \t \tのprintln "ChatUtilityチャットユーザ:" + ShiroUser.get(ID) \t}} –
は、試験中またはTで起こっ誤差であります彼はアプリを実行している? –