最近想写一个mockdata的工具,就是mock出一些数据对象用来做测试或是其他的一些事情。
目前我希望能做出来的效果应该是可以自定义每个类的生成规则,也可以像validation那样详细到不同对象的不同属性上。我也查找了已有的类似工具,就像是jmockdata,可用,但是还没有满足我想要的功能,并且不够优雅和高自定义化。
举个例子,除了基本的数据生成功能,我还希望能设定全局的Integer的生成范围是(-99999, 99999),但Person对象中的age生成范围是(0, 200),sex的生成范围是(0, 5),luckyNum遵循全局设定,另一个Pet类的age的生成范围则是(0, 20)。在Person中有一个名为firstChild的Person对象,构造器可以进行递归生成,并且可以控制每一个循环引用属性的构造深度(例如另一个属性secondChild的递归深度就比firstChild小)。Person的name从字典库A中取得(字典库必然是自定义的),nick从字典库B中取得,对象同样允许通过字典库获得(一般叫做对象池)。某些类在进行实例化时会有不同的构造方法,这个工具必须支持构造方法选择,或是针对某些属性自定义实例化方法。
并且这个工具能让我在不同的环境中进行测试,例如一个NoLimit配置(可能符合真实数据要求)、一个Allowed配置(必然符合真实数据要求),一个Blocked配置(必然不符合真实数据要求)。
当然,因为这是一个测试工具,所以无侵入很重要,也就是说注解不能为主体,或者说,注解能做的事必然可以通过手动设置来实现。
感觉上写出来会很有意思,就看框架设计了。