Groovy   发布时间:2022-04-12  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了用groovy测试java代码的两个障碍及其他大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
from: http://hamletdarcy.blogspot.com/2008/04/testing-java-from-groovy-2.html
本人正在实践用groovy来测试java代码,这篇文章给出了两个使用groovy测试java代码与测试groovy代码的区别.

一个是groovy能对groovy代码中的静态方法进行mock,但是不能对java代码的静态方法进行mock,本人也碰到这种问题,当时也没有看到有地方提到这一点.

比如这样的代码:
import java.io.File;

public class Javaservice {  
 static long getFileSize(String path) {     
   File file = new File(path);     
   return file.length();  
 }
}


然后是groovy代码:
class GroovyClient {
 def filename;

 public long getFileSize() {
   return Javaservice.getFileSize(fileName);
 }
}


然后测试代码:
def client = new GroovyClient(filename: "shortFile.txt")   

def mock = new mockFor(JavaservicE)
mock.demand.getFileSize("shortFile.txt") { -1 }
mock.use {
 assert -1 == client.getFileSize()
}


如果GroovyClient 是java代码,则上面的测试将无法成功

第二个是groovy可以对groovy的new操作符进行mock,但是不能对java的new操作符进行mock.

比如上面的测试代码,这样写:
def mock = new mockFor(FilE)         

mock.demand.length() { longFileSize }         
mock.use {            
 assert longFileSize == Groovyservice.getFileSize("shortFile.txt")        
}


但是如果是Javaservice则这个测试会失败,如果把new看成是class的静态方法,这个就很好理解了.

然用groovy对java代码进行测试有这两个限制,但是使用groovy做java测试还有更多的好处: 最大的好处就是能更容易的构造测试数据,更容易stub接口进行测试,闭包,collect和inject在对大量测试数据的构造上也是一个巨大的优势.

在这文章中提到另外两篇用groovy写单元测试的文章,我也一并简单的写出来:
from: http://groovy.dzone.com/news/writing-unit-tests-using-groov

groovy对构造数据的简化,有一个菜单数据结构,用java是这样的:
...
group = new MenuGroup();
group.setPosition(0);
group.setName("TestGroup");

topLevelItem1 = new TopLevelItem();
topLevelItem1.setPosition(1);
topLevelItem1.setParent(group);

subLevelItem1 = new SubLevelItem();
subLevelItem1.setPosition(2);
subLevelItem1.setParent(topLevelItem1);

subLevelItem2 = new SubLevelItem();
subLevelItem2.setPosition(3);
subLevelItem2.setParent(topLevelItem1);

Set<Integer> roles = new HashSet<Integer>(3);
roles.add(1);
roles.add(2);
roles.add(3);

parent1 = new Parentservice();
parent1.setMenuItem(topLevelItem1);
parent1.setName("parent1");
parent1.setRolEIDs(roles);
parent1.setUrl("parent1");

topLevelItem1.setservice(parent1);
...


而用groovy可以简化成这样:
...
group = new MenuGroup(position : 0,name : "TestGroup")

topLevelItem1 = new TopLevelItem(position : 1,parent : group)

subLevelItem1 = new SubLevelItem(position : 2,parent : topLevelItem1)
subLevelItem2 = new SubLevelItem(position : 3,parent : topLevelItem1)

def roles = [1,2,3] as Set

parent1 = new Parentservice(menuItem : topLevelItem1,name : "parent1",rolEIDs : roles,url : "parent1")

topLevelItem1.service = parent1
...


同样的功能,22行java代码用了8行groovy代码搞定,耶!

from: http://groovy.dzone.com/news/follow-writing-unit-tests-usin

这篇文章使用了builder来构造测试数据:
def group = builder.menuGroup( position: 0,name: 'TestGroup' ){
   topLevelItem( position: 1 ){
      subLevelItem( position: 2 )
      subLevelItem( position: 3 )
      parentservice( name: 'parent1',url: 'parent1',rolEIDs: [1,3] as Set )
   }
}
看起来更nice!

大佬总结

以上是大佬教程为你收集整理的用groovy测试java代码的两个障碍及其他全部内容,希望文章能够帮你解决用groovy测试java代码的两个障碍及其他所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。