unit-testing - 如何在单元测试中避免使用Grails/Spock进行域调用

标签 unit-testing grails spock grails-domain-class

我有以下几行代码

username = username.stripIndent()
user = User."${databaseInstance}".findByUsername(username)
if (user == null){
   return "User does not exist"
}

我正在尝试通过以下方式对该功能进行单元测试:
def setup() {
    def mockUser = Mock(User)
    myClass.user = mockUser
}

void "userNotFoundGetUserInfo"(){
    given:
    myClass.databaseInstance = 'X'
    _ * mockUser._ >> null

    when:
    def result = myClass.getUserInfo(username)

    then:
    result == "User does not exist"
}

但我不断收到错误消息“没有此类属性:类mypackage.User为X”

我意识到这是因为我在 mock “用户”对象而不是“用户”类,所以如何解决我的代码直接调用域类的事实?

最佳答案

使用Grails内置的@Mock注释代替Spock的Mock()方法。像这样:

@Mock(User)
class YourTestSpecification extends Specification {
    def setup() {
        myClass.user = new User()
    }
}
@Mock旨在模拟Grails域类。

关于unit-testing - 如何在单元测试中避免使用Grails/Spock进行域调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25775980/

相关文章:

grails插件重新加载

java - 我的列表中的 Grails .size().toString() 不起作用

spring - grailsApplicaiton如何在Grails Spock单元测试中初始化?

groovy - 如何使 eclipse junit stacktrace 使用非比例字体?

python - 有没有办法将 python nos2 映射到安装在自定义位置的覆盖插件?

数据库交互代码

grails - 使用Grails 3将响应从长时间运行的流程返回给客户端

Python单元测试-可能会一直失败直到通过吗?

iOS Kiwi/Nocilla 测试不调用 block

java - Spock + Spring Boot Web - 获取异常消息