我在Eclipse中有两个Grails项目。我使用Configure Build Path设置引用另一个项目。但是,运行测试会引发错误java.lang.IllegalStateException: Method on class [com.example.domain.Phone] was used outside of a Grails application. If running in the context of a test using the mocking API or bootstrap Grails correctly.
通常使用@Mock(使用Mockito)或mockDomain()修复此问题,但我不在单元测试中,因此不会看到这些项目。
如果无法看到我需要使用的域对象,如何通过集成测试测试我的服务层?这些域对象是分开的,因为需要在多个项目中使用它们。
答案 0 :(得分:2)
如果您的GORM类与Application
类不在同一个包中,则需要将ComponentScan
注释添加到Application
类以指示GORM类的位置。例如:
@ComponentScan(basePackages=['foo.bar', 'my.company'])
class Application {
....
答案 1 :(得分:1)
可以使用GORM for Spring Boot。 https://spring.io/guides/gs/accessing-data-gorm/
中的示例如果您正在编写测试,则可以使用HibernateTestMixin或使用HibernateDatastoreSpringInitializer初始化GORM。
答案 2 :(得分:1)
如果您正在编写测试,请不要忘记:
Spec中的注释。 @IntegrationTest
很重要
@ContextConfiguration(loader = SpringApplicationContextLoader, classes = ConfigTest)
@EnableAutoConfiguration
@IntegrationTest
class PaymentServiceSpec extends Specification{
// Tests with GORM entities
}
注入hibernate的类
@SpringBootApplication
@Import(HibernateGormAutoConfiguration)
class CoreConfigTest {
}
由于@IntegrationTest,必须有一个Application类用于测试
@SpringBootApplication
class TestApplication {
static void main(String[] args) {
run TestApplication, args
}
}
我正在使用此依赖项:
runtime 'org.postgresql:postgresql:9.3-1102-jdbc41'
compile("org.grails:gorm-hibernate4-spring-boot:1.1.0.RELEASE") {
exclude module: 'spring-boot-cli'
exclude module: 'groovy-all'
}
compile("org.springframework.boot:spring-boot-starter-jdbc:1.2.2.RELEASE")