10

私は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 を使用して最初にセットアップで 2 人または 3 人のユーザーを作成します。ユーザーのリストを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" }
}
4

2 に答える 2

13

サービス クラスは次のように最適化できます。

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

Spock Unit Test:
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>
  }
}
于 2013-09-05T19:52:28.157 に答える
4

build-test-data プラグインを使用してユーザーを構築します。

@TestFor(EncouragementService)
@Build(User)
class EncouragementServiceSpec extends Specification {

  def "encourage users does x"() {
    given:
    def users = createUsers();

    when:
    service.encourageUsers(users)  

    then:
    // assert something
  }

  def createUsers(){
    [User.build(), User.build(), User.build()]
  }
}

また、適切な spock 仕様にするために、コードにいくつかの変更を加えました。テストは仕様を拡張する必要があり、 Spock のキーワードに慣れる必要があるかもしれません。

于 2013-09-05T19:49:46.893 に答える