【发布时间】:2015-01-20 12:50:57
【问题描述】:
我在我的 grails 应用程序中使用 spring 安全核心插件,默认情况下它会为我创建一个 User 类。我可以在我的测试类上使用 @Mock([User]) 注释来模拟它。
在我的应用程序中,我有几种类型的用户,因此我创建了在应用程序本身中运行良好的子类型。
Subtype1 extends User
Subtype2 extends User
这在 grails 中处理得非常好,数据库也反映了这一点。然而,在我的代码中,我确实有一般用户可以调用的方法,所以我使用 User.get(id),因为子类型和父类的 id 相同。
如果我模拟用户和子类型,然后创建一个子类型对象如下
@TestFor(MyController)
@Mock([Subtype1,User])
class MyControllerSpec extends Specification {
def test_methodName() {
setup:
Subtype1 sub = new Subtype1(username:"blah",password:"blah",.....).save()
when:
controller.methodName(sub.id)
then:
//Some tests here
}
然后下面的代码被注释显示结果
class MyController() {
methodName(long id) {
User user = User.get(id) //This returns null
Subtype1 sub = Subtype1.get(id) //This works
}
}
在未经过测试的应用程序中,两者都可以工作,但是当我模拟它们时,它会失败,并且在我小时候创建时不会让我得到父母。
知道我做错了什么吗?
【问题讨论】:
标签: grails groovy mocking subclass