我在我的grails应用程序中使用spring安全核心插件,默认情况下它创建了一个User类。我可以使用我的测试类上的@Mock([User])注释来模拟它。
在我的应用程序中,我有几种类型的用户,因此我创建了在应用程序本身中运行良好的子类型。
Subtype1 extends User
Subtype2 extends User
这在grails中处理完全正常,数据库也反映了这一点。然而,在我的代码中,我确实有一些方法可以被普通用户调用,所以我使用User.get(id),因为对于Subtype和Parent,id都是相同的。
如果我模拟User和Subtype,然后按如下所示创建Subtype对象
@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
}
}
在未经测试的应用程序中,无论是否工作,当我嘲笑它时它会失败并且在我小时候创建时不会让我得到父母。
知道我做错了吗?
答案 0 :(得分:0)
在单元测试中看起来这是不可能的,无论是否有意。
将测试编写为集成测试可以正常工作。