2014-09-23 106 views
2

我有一个服务类有2种方法(一种是公共的,另一种是保护的)。我想单元测试我的代码。下面是代码片段 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()的返回结果,这两种方法都在同一服务类正在进行单元测试。如何嘲笑它并完成任务?

回答

1

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

你可能会变得更好,将myMethod2()移到另一个班。考虑MyServiceClass是否为trying to do too much

编辑

你问的答案,不需要移动myMethod2()

选项1

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

选项2

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

我还是建议重构代码,如果你有

+0

为什么我们不能这样做..? – 2014-09-23 15:04:01

+1

因为你必须在你的测试中实例化一个新的MyServiceClass(),所以你正在执行“真实”的代码来测试。因此,同一个类不能成为模拟对象。 – Brad 2014-09-23 15:11:24

+0

是他们的任何其他方式来解决这个iisue而不移动方法到任何一个类...? – 2014-09-23 15:15:02

相关问题