如何模拟控制器内的类?

时间:2016-07-06 06:10:09

标签: grails

我有一个控制器方法,它在里面创建一个域实例并保存它。我需要模拟这个保存失败所以我想要嘲笑这个域,而对于save方法我抛出异常。有没有办法模仿捐赠者阶层。

def method(){

    ...

    Donor donor = new Donor()                           

    donor.properties = convertedParams

    donor.save(failOnError: true)

    ...

 }

我知道如何模拟控制器内部使用的服务

      def mock = new groovy.mock.interceptor.MockFor(ExampleService)
        def exampleService = controller.exampleService
        mock.demand.exampleMethod(){ Long id, TransactionResponse tr ->
            throw new RegistrationActivationException(new IllegalStateException('something went wrong'), [])
        }
        mock.use{
            controller.exampleService = new ExampleService()
            model = controller.exampleMethod()
        }

因此,上面的代码将模拟控制器中使用的ExampleService服务。有没有办法做这样的模拟,但不是服务,但对于在上面的第一个代码块中的方法中实例化的域。我需要模拟Donor类,当调用save时,我需要抛出异常以模拟和测试当捐赠者保存失败时会发生什么。

我感谢任何帮助!谢谢!

1 个答案:

答案 0 :(得分:1)

  

我需要模拟Donor类,当调用save时,我需要抛出一个异常,以模拟和测试当捐赠者保存失败时会发生什么。

这似乎是一种非常复杂的方法来实现在保存时抛出的异常。相反,您似乎可以尝试保存与Donor不匹配的Donor实例。假设new Donor().save(failOnError: true) 至少有一个非null的属性,这应该实现相同的东西

  SELECT CONCAT(DATE_FORMAT(date,'%b'),' ',
  (SELECT CONCAT('(',YEAR(date),'-',LPAD(MONTH(date),2,0),'-01 - ')
  ), (SELECT concat(last_day(date),')')
   )) dates,  SUM(quantity) qty FROM DATES GROUP BY MONTH(date) ORDER BY MONTH(date)