本示例采用测试驱动开发的方法,首先编写测试:
1. public class HelloTest extends GroovyTestCase{ 2. @Test 3. public void testToString(){ 4. def h = new Hello("prince"); 5. assertEquals("hello prince",h.toString()); 6. } 7. } |
这是一段groovy的代码,定义了一个Hello类型,并且当构造函数参数为“prince”时,希望这该对象的toString()方法能够返回“hello prince”。
接下来,编写产品代码,定义Hello类,首先toString()方法。注意,产品代码可以是java的,也可以是groovy的。这里使用groovy编写产品代码。如下:
1. public class Hello{ 2. 3. private def _info 4. 5. public Hello(def info){ 6. _info = info 7. } 8. String toString(){ 9. return "hello ${_info}" 10. } 11. } |
很简单的代码,当然测试也会很轻易的通过。其实,对于这种比较简单的问题,groovy与java的解决方案是差不多的。但在Mock Object方面,groovy更胜一筹。
java的mock解决方案比较流行的有easymock和jMock。对于easymock,如果需要mock类而不是接口,则需要引入easymockclassextension.jar。在groovy中,使用gmock会简单的多。
关于GMock的使用,有两种方法。一是直接继承自GMockTestCase,二是在类上使用@WithGMock注解。GMock使用闭包来简化操作。下面给出简单示例:
1. @WithGMock |
现在,关于单元测试有了一种新的解决方案。很多公司由于各种原因需要使用java进行开发,如果想简化单元测试或者是groovy语言的美妙,使用groovy作为单元测试的解决方案不失为一个好的选择。
相关阅读: