unit-testing - 模拟正在单元测试的服务类中的方法

标签 unit-testing groovy grails-2.0 gunit

我有一个服务类,它有 2 个方法(一个是公共(public)的,另一个是 protected )。我正在尝试对我的代码进行单元测试。下面是代码片段 MyServiceClass.groovy

class MyServiceClass {

       public boolean myMethod1() {
            // some code
            boolean success = myMethod2()
            // some code
       }

      public boolean myMethod2() {
          // some logic to return true/false
          return true
      }

}

MyServiceClassTests.groovy

class MyServiceClassTests {

      void testMyMethod1() {
           // unit test code
      }

}

在上面的单元测试代码中,我想模拟 myMethod1() 调用的 myMethod2() 返回结果,即这两个方法都在单元测试下的同一个服务类中。如何 mock 它并完成任务?

最佳答案

你当然不能模拟被测试的类,否则你只是在测试一个模拟。

myMethod2() 移至另一个类中可能会更好。想想MyServiceClass是否是trying to do too much .

编辑

您要求的答案不需要移动 myMethod2()

选项 1

创建一个新的子类作为被测试的类,而不是 MyServiceClass。您的新类应扩展 MyServiceClass,然后您可以覆盖 myMethod2() 并提供不同的“仅测试”实现。

选项 2

可以使用Mockito to Spy the class under test ,但这是一种非正统的方法。

如果您有控制权,我仍然建议重构代码

关于unit-testing - 模拟正在单元测试的服务类中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25997689/

相关文章:

perl - 我如何模拟 Log::Log4perl::INFO?

java - 在运行时创建的外部groovy类中注入(inject)spring服务

groovy - 查找并修改集合中的重复条目

unit-testing - Grails:在另一个服务中模拟一个服务及其方法

grails - 如何使枚举字段成为tinyint而不是varchar?

unit-testing - PHPUnit - Setter 不修改我的模拟

c++ - 如何在 EC2 上对 OpenGL 进行单元测试

java - 如何加载相对于类包的文件?

java - 使用 Spring Boot 在 Solr 中搜索逗号分隔的列表

grails - 如何从g:select标记传递值