从其他服务调用服务时出错。
| Running 13 unit tests... 1 of 13
| Failure: test myAction(MyServiceSpec)
2015.05.27/02:17:09 ERROR StackTrace -- Full Stack Trace:
java.lang.NullPointerException: Cannot invoke method saveUserRole() on null object
我做了两项服务如下。
class MyService {
def userRoleService
def myAction(){
def userQuery = User.where{username == "test1"}.get()
def roleQuery = Role.where{authority == "ROLE_ADMIN"}.get()
if (userQuery && roleQuery){
userRoleService.saveUserRole(userQuery, roleQuery)
}
}
}
class UserRoleService{
def saveUserRole(user, role){
new UserRole(role: role, user:user).save(flush: true)
}
}
我想测试myAction()
的{{1}},所以我提出了MyService
,如下所示。
MyServiceSpec
调用@TestFor(DatabaseService)
@TestMixin(DomainClassUnitTestMixin)
class MyServiceSpec extends Specification {
def userRoleService
def setup() { }
def cleanup() { }
void "test myAction"(){
setup:
mockDomain( Role,[ [authority:"ROLE_ADMIN"], [authority:"ROLE_USER"] ] )
mockDomain( User,[ [username:"test1",password:"1234"] ] )
mockDomain( UserRole )
when: "call the action"
service.myAction()
then:
UserRole.count() == 1
}
}
时会导致此错误。
如何在没有错误的情况下测试userRoleService.saveUserRole(userQuery, roleQuery)
myAction()
?
更新
我更改了Spec Class,如下所示。
MyService
测试认可服务类,谢谢。
但似乎这个测试用例不好或者这个程序设计不好。
您是否有任何关于引用此代码的建议?
答案 0 :(得分:1)
在评论之后,我更改了Spec Class,如下所示。
@TestFor(DatabaseService)
@TestMixin(DomainClassUnitTestMixin)
class MyServiceSpec extends Specification {
def setup() { }
def cleanup() { }
void "test myAction"(){
setup:
mockDomain( Role,[ [authority:"ROLE_ADMIN"], [authority:"ROLE_USER"] ] )
mockDomain( User,[ [username:"test1",password:"1234"] ] )
mockDomain( UserRole )
def userQuery = User.where{username == "test1"}.get()
def roleQuery = Role.where{authority == "ROLE_ADMIN"}.get()
def mockUserRoleService = Mock(UserRoleService){
1 * saveUserRole(userQuery, roleQuery) >> new UserRole(role: roleQuery, user:userQuery).save(flush: true)
}
service.userRoleService = mockUserRoleService
when: "call the action"
service.myAction()
then:
UserRole.count() == 1
}
}
测试认可服务类,谢谢。
但似乎这个测试用例不好或者这个程序设计不好。
您是否有任何关于引用此代码的建议?