【问题标题】:Mocking a simple method inside Service class in Grails在 Grails 的 Service 类中模拟一个简单的方法
【发布时间】:2014-12-11 22:29:39
【问题描述】:

我试图模拟 UserService 类中的方法(passwordComplexityCheck)。

下面是我在我的测试课上做的模拟

def userService
controller.userService=new UserService()

controller.userService=[passwordComplexityCheck:{def k->
   return true
}]

但这不起作用。

下面是UserService类和方法。

class UserService {
   //required declaration 
   ........
   public boolean passwordComplexityCheck(String password) {

      log.debug("Enter(Method) - passwordComplexityCheck()")

      if (password != null && password.trim() != "") {
         if (password.length() < grailsApplication.config.user.password.min.length) {
            return false
         }
         if (password == password.toLowerCase()) {
            return false
         }
         if (password == password.toUpperCase()) {
            return false
         }
         if (password.grep(~/\d+/).size == 0) {
            return false
         }
      } else {
         return false
      }
      return true
   }
}

我只需要以一种可以返回 true 或 false 的方式模拟它。既然方法有参数,mocking会不一样吗?在服务中模拟方法的一般方式是什么?

【问题讨论】:

  • 这在什么方面不起作用?你有错误吗?或者只是没有得到你期望的行为?了解您所看到的异常或行为将有助于追查问题。
  • 嗨,很抱歉造成混乱。由于登录 UserService 类而发生错误。您能否建议如何模拟登录服务类?
  • log.debug("Enter(Method) - passwordComplexityCheck()")
  • groovy.lang.MissingPropertyException:没有这样的属性:类日志:com.merckserono.ecko.data.UserService at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:49)在 org.codehaus.groovy.runtime.callsite.GetEffectivePogoPropertySite.getProperty(GetEffectivePogoPropertySite.java:86) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:239) com.merckserono.ecko.data。 UserService.passwordComplexityCheck(UserService.groovy:290)com.merckserono.ecko.data.UserService$passwordComplexityCheck.call(Unknown Source

标签: unit-testing grails


【解决方案1】:

为了让 Grails 中的内置日志在测试期间正常工作,您必须模拟日志功能。为此,您需要在测试类中包含以下代码。最好的地方是在调用任何代码之前的 setUp() 方法。

mockLogging(UserService, true)

见:http://grails.org/doc/latest/api/grails/test/GrailsUnitTestCase.html#mockLogging%28java.lang.Class,%20boolean%29

【讨论】:

  • 在我的配置文件中,我有一个值“user.password.min.length = 6”,我试图将其模拟为“mockConfig(user.password.min.length)。但这是显示空指针异常。此值在代码中被视为 grailsApplication.config.user.password.min.length。知道吗?
  • 不确定那个,伙计。如果您没有找到答案,我会查看 mockConfig() 的文档并在此处提出一个新问题。祝你好运。
猜你喜欢
  • 1970-01-01
  • 2015-02-11
  • 1970-01-01
  • 2017-12-29
  • 2012-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多