java - 如何使用 Spock 测试 Grails 服务?

标签 java unit-testing grails groovy spock

我有一个EncouragementService.groovy,方法如下

  class EncouragementService {
   def stripePaymentService 

   def encourageUsers(List<User> users){
     if(null != users && users.size()>0){
      for(User user : users){
        //logic
        stripePaymentService.encourage(user)
        //
      }
     }   
   }
  }

为了在 JAVA 世界中测试以上代码,使用 JUnit 我将首先在设置中创建两个或三个用户。将用户列表传递给 encourageUsers(...) 方法并检查我想要的结果。

我怎样才能在 grails 中实现同样的事情,

import com.github.jmkgreen.morphia.Datastore;

@TestFor(EncouragementService)
class EncouragementServiceSpec {

  def morphiaService = new MorphiaService()

  void testEncourageUsers() {
        List<User> users = createUsers();
        encouragementService.(users)  
            //
  }

  def createUsers(){
       Datastore datastore = morphiaService.dataStoreInstance()
       def user = new User()
       user.setName("Prayag Upd")
       //
       datastore.save(user)
       [user]
  }
}

我正在使用 spock:0.7

plugins {
    test(":spock:0.7") { exclude "spock-grails-support" }
}

最佳答案

服务类可以优化如下:

class EncouragementService {
   def encourageUsers(List<User> users){
       if(users){ //Groovy truth takes care of all the checks
          for(user in users){
            //logic
          }
       }   
   }
}

Spock 单元测试:
Spock 将测试提升到了另一个层次,您可以在其中测试行为(遵循 BDD)。测试类看起来像:

import spock.lang.*

@TestFor(EncouragementService)
@Mock(User) //If you are accessing User domain object.
class EncouragementServiceSpec extends Specification{
  //def encouragementService //DO NOT NEED: mocked in @TestFor annotation

  void "test Encourage Users are properly handled"() {
      given: "List of Users"
          List<User> users = createUsers()

      when: "service is called"
          //"service" represents the grails service you are testing for
          service.encourageUsers(users) 

      then: "Expect something to happen"
          //Assertion goes here
  }

  private def createUsers(){
       return users //List<User>
  }
}

关于java - 如何使用 Spock 测试 Grails 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18644581/

相关文章:

mongodb - Grails/MongoDB 删除所有

java - 在某个数字 : Comparable smallestAfter(Comparable[] values, 之后查找最小数字可比较)

java - 为 XYAreaChart 设置 "auto"范围

javascript - 在这个 sinon.spy mocha 示例中是否有一种简单的方法来更改确认和警报

grails - 使用http构建创建soap请求

grails - 使用静态主体调用 Grails 标记

java - 从容器请求中提取路径参数

java - Camera2 API 使预览填充整个 View

c# - xunit.runner.visualstudio 是否不适用于 Visual Studio

reactjs - 在 Jest 中测试 Axios