Feed4Junit的简单使用(四)数据来自定义数据源
Feed4Junit官方地址:
http://databene.org/feed4junit.html
?
Feed4Junit自动生成测试数据:
Feed4JUnit 1.1.1 发布了,该版本支持从 CSV 文件中导入完整的 JavaBean 图表。
利用Feed4JUnit能够很方便用随机但校验过的数据执行冒烟测试来提高代码 代码覆盖率和发现由非常特殊的数据结构产生的Bug。此外还可以利用Feed4JUnit轻松定义等价类测试。
?
官方文档
If you wish to retrieve data from other data source or file types, you can program a connector component, that inherits from the class Feed4JUnitGenerator and provides data:
public static class MyGenerator extends UnsafeMethodParamsGenerator {@Bean(idpackage com.easyway.feed4junit;import org.databene.benerator.util.UnsafeMethodParamsGenerator;import org.databene.benerator.wrapper.ProductWrapper;/** * * @author longgangbai * */public class MyGenerator extends UnsafeMethodParamsGenerator {@Overridepublic ProductWrapper<Object[]> generate(ProductWrapper<Object[]> paramProductWrapper) {return paramProductWrapper.wrap(generate());} public Object[] generate() { return new Object[] { 1, 2, 3 }; }}
?
测试代码:
package com.easyway.feed4junit;import org.databene.benerator.anno.Bean;import org.databene.benerator.anno.InvocationCount;import org.databene.benerator.anno.Source;import org.databene.feed4junit.Feeder;import org.junit.Test;import org.junit.runner.RunWith;@RunWith(Feeder.class)@Bean(id = "mygen", type = MyGenerator.class)public class BeanSourceTest { @Test @Source("mygen") @InvocationCount(5) public void testArrayIterable(int n1, int n2, int n3) { System.out.println(n1 + ", " + n2 + ", " + n3); } } ?
需要参数的数据源生成器:
package com.easyway.feed4junit;import org.databene.benerator.util.UnsafeMethodParamsGenerator;import org.databene.benerator.wrapper.ProductWrapper;/**?* 构造函数传参可以不需要get/set方法?* @author longgangbai?*?*/public class MyOtherGenerator extends UnsafeMethodParamsGenerator {private int num;private String test;public MyOtherGenerator(int num,String test){this.num=num;this.test=test;}@Overridepublic ProductWrapper<Object[]> generate(ProductWrapper<Object[]> paramProductWrapper) {return paramProductWrapper.wrap(generate());} public Object[] generate() { return new Object[] { 1, 2, 3 }; }} ?
测试代码如下:
?
package com.easyway.feed4junit;import org.databene.benerator.anno.Bean;import org.databene.benerator.anno.InvocationCount;import org.databene.benerator.anno.Source;import org.databene.feed4junit.Feeder;import org.junit.Test;import org.junit.runner.RunWith;@RunWith(Feeder.class)@Bean(id = "mygen", spec = "new com.easyway.feed4junit.MyOtherGenerator(1, 'test')") public class BeanSourceConstructTest1 { @Test @Source("mygen") @InvocationCount(5) public void testArrayIterable(int n1, int n2, int n3) { System.out.println(n1 + ", " + n2 + ", " + n3); } } ?
不带构造函数的且带属性的
package com.easyway.feed4junit;import org.databene.benerator.util.UnsafeMethodParamsGenerator;import org.databene.benerator.wrapper.ProductWrapper;/** * 非构造函数传参可以必须需要get/set方法 * UnsafeMethodParamsGenerator * @author longgangbai * */public class MyOtherGenerator2 extends UnsafeMethodParamsGenerator {private int num;private String test;public MyOtherGenerator2(){}public int getNum() {return num;}public void setNum(int num) {this.num = num;}public String getTest() {return test;}public void setTest(String test) {this.test = test;}@Overridepublic ProductWrapper<Object[]> generate(ProductWrapper<Object[]> paramProductWrapper) {return paramProductWrapper.wrap(generate());} public Object[] generate() { return new Object[] { 1, 2, 3 }; }} ?
测试类:
package com.easyway.feed4junit;import org.databene.benerator.anno.Bean;import org.databene.benerator.anno.InvocationCount;import org.databene.benerator.anno.Property;import org.databene.benerator.anno.Source;import org.databene.feed4junit.Feeder;import org.junit.Test;import org.junit.runner.RunWith;@RunWith(Feeder.class)@Bean(id = "mygen", type = MyOtherGenerator2.class, properties = { @Property(name = "num", value = "1"), @Property(name = "test", value="test")})public class BeanSourceConstructTest3 { @Test @Source("mygen") @InvocationCount(5) public void testArrayIterable(int n1, int n2, int n3) { System.out.println(n1 + ", " + n2 + ", " + n3); } } ?