gpt4 book ai didi

java - 使用代码生成来生成测试数据

转载 作者:行者123 更新时间:2023-11-30 02:39:43 25 4
gpt4 key购买 nike

我经常遇到这样的情况:我想将大型对象图的内容(运行时或调试期间)保存到一组重新创建该对象图的语句中。然后可以将其用作单元测试用例中的测试数据。

screenshot of debugger

假设对象图的叶子是标准类型(StringBigDecimalDate 等),并且分支遵循 bean 约定(getters,setters,空构造函数),应该可以生成这种文件(例如TestData.java):

   public static Car createCar() {

Wheel wheel1 = new Wheel();
wheel1.setTypePressure( 2.1f );
Wheel wheel2 = new Wheel();
wheel2.setTypePressure( 2.3f );
Wheel wheel3 = new Wheel();
wheel3.setTypePressure( 2.0f );
Wheel wheel4 = new Wheel();
wheel4.setTypePressure( 2.8f );
List<Wheel> wheels = new ArrayList<>( Arrays.asList( wheel1, wheel2, wheel3, wheel4 ) );

Brake brake = new Brake();
brake.setBrakeType( BrakeType.PLAIN );

Car car = new Car();
car.setBrake( brake );
car.setWheels( wheels );
car.setColor( "blue" );

return car;
}

如果能以某种方式将其直接插入调试 session ,那就太好了,但是一些插入语句将“带有内容的java对象图创建代码”输出写入System.out也可以。

那么,我怎样才能以最有效的方式实现这一点呢?

最佳答案

好主意,但(可能固执己见)不是最好的解决方案。

是的,数据可以转换成Java程序;然后需要保存、编译……

然后就会出现这样的问题:您想保留源代码还是编译后的代码? (数据或底层 JRE)版本控制怎么样?

长话短说:Java 代码并不是一种非常方便的表示数据的格式。因此:不要将数据转换为 Java 代码,而是将其转换为某种 JSON 表示形式。

重点是:当你的类真正遵循“bean 风格”时;并且他们已经有了 getter/setters/默认构造函数 - 那么任何像样的 JSON 解析器库都应该“开箱即用”。你把你的汽车对象扔向它;结果是很好的、标准的 JSON。然后,您编写一个小辅助工具来读取这些文件并将它们转回 Car 对象。完成。

这就是要走的路(这个建议来自于一个开发系统的人,在这个系统中,架构师完全想要你所要求的东西;我们花了很多时间和痛苦才到达那里......但是那这是 10 多年前的事了;而到了 2017 年,你就不再这样做了)。

鉴于您的最新评论(因为您主要对单元测试代码感兴趣);我建议在这里考虑使用构建器模式。

这样你的代码就会归结为

new CarBuilder().wheel(new WheelBuilder(). ...

这样做的好处是:有多种方法可以为您生成此类构建器;例如项目Lombok有一个@Builder注释!

无论如何,自动生成构建器的市场是相当不错的 rich !

关于java - 使用代码生成来生成测试数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42107685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com