Grails集成测试-getBean()的空对象

Grails集成测试-getBean()的空对象,grails,testing,Grails,Testing,我不明白为什么这里的集成测试会抛出异常 集成测试## 用于测试的控制台输出 |完成了3个集成测试,5个在980ms内失败您正在集成测试中使用单元测试注释-这将导致很多问题。通常,在进行集成测试时,如果您想使用JUnit3样式的测试,或者什么都不做并使用JUnit4注释,或者使用Spock和ExtendeIntegrationSpec,那么您可以扩展GroovyTestCase 至于NPE,无论您使用的是正确的单元测试还是集成测试,您都需要自己管理控制器的依赖关系,因为您使用new显式创建它,而不

我不明白为什么这里的集成测试会抛出异常

集成测试## 用于测试的控制台输出
|完成了3个集成测试,5个在980ms内失败

您正在集成测试中使用单元测试注释-这将导致很多问题。通常,在进行集成测试时,如果您想使用JUnit3样式的测试,或者什么都不做并使用JUnit4注释,或者使用Spock和ExtendeIntegrationSpec,那么您可以扩展GroovyTestCase

至于NPE,无论您使用的是正确的单元测试还是集成测试,您都需要自己管理控制器的依赖关系,因为您使用
new
显式创建它,而不是作为预连线的Springbean访问它。但是集成测试确实支持依赖注入,所以只需在测试中为控制器中需要的任何内容添加字段,并在
设置中或在单个方法中,您可以在控制器中设置这些bean,例如

class UserControllerTests extends GroovyTestCase {

   def grailsApplication
   def someSpringBean
   def someOtherSpringBean
   private UserController uc = new UserController()

   protected void setUp() {
      super.setUp()
      user = new User(userName: "User1", firstName: "User1FN", lastName: "User1LN").save()

      //Set up UserController
      uc.applicationContext = grailsApplication.mainContext
      uc.someSpringBean = someSpringBean
      uc.someOtherSpringBean = someOtherSpringBean
   }
...

还请注意,您不需要清理
tearDown()
-在测试方法结束时回滚的事务中运行的集成测试中的数据。

您在集成测试中使用单元测试注释-这将导致许多问题。通常,在进行集成测试时,如果您想使用JUnit3样式的测试,或者什么都不做并使用JUnit4注释,或者使用Spock和ExtendeIntegrationSpec,那么您可以扩展GroovyTestCase

至于NPE,无论您使用的是正确的单元测试还是集成测试,您都需要自己管理控制器的依赖关系,因为您使用
new
显式创建它,而不是作为预连线的Springbean访问它。但是集成测试确实支持依赖注入,所以只需在测试中为控制器中需要的任何内容添加字段,并在
设置中或在单个方法中,您可以在控制器中设置这些bean,例如

class UserControllerTests extends GroovyTestCase {

   def grailsApplication
   def someSpringBean
   def someOtherSpringBean
   private UserController uc = new UserController()

   protected void setUp() {
      super.setUp()
      user = new User(userName: "User1", firstName: "User1FN", lastName: "User1LN").save()

      //Set up UserController
      uc.applicationContext = grailsApplication.mainContext
      uc.someSpringBean = someSpringBean
      uc.someOtherSpringBean = someOtherSpringBean
   }
...

另外请注意,您不需要在
tearDown()
中清理数据-集成测试在测试方法结束时回滚的事务中运行。

感谢您提供的提示。我认为我仍然需要学习更多关于SpringBean如何工作以及如何处理依赖关系的知识。我会继续读下去。谢谢。谢谢你的提示。我认为我仍然需要学习更多关于SpringBean如何工作以及如何处理依赖关系的知识。我会继续读下去。谢谢。
class UserControllerTests extends GroovyTestCase {

   def grailsApplication
   def someSpringBean
   def someOtherSpringBean
   private UserController uc = new UserController()

   protected void setUp() {
      super.setUp()
      user = new User(userName: "User1", firstName: "User1FN", lastName: "User1LN").save()

      //Set up UserController
      uc.applicationContext = grailsApplication.mainContext
      uc.someSpringBean = someSpringBean
      uc.someOtherSpringBean = someOtherSpringBean
   }
...