Eclipse 插件,用于自动创建 Java 代码以重现对象的状态,以便在调试时进行快速测试
Posted
技术标签:
【中文标题】Eclipse 插件,用于自动创建 Java 代码以重现对象的状态,以便在调试时进行快速测试【英文标题】:Eclipse plugin for creating Java code automatically to reproduce the state of an object for fast testing while debugging 【发布时间】:2011-12-02 21:32:04 【问题描述】:我正在寻找一个用于 Eclipse 的插件来创建 Java 代码,例如:
Person person = new Person();
person.setName("name");
List<Address> addresses = new ArrayList<Address>();
Address address = new Address("Address");
addresses.add(address);
person.setAddresses(addresses);
,在调试时来自一个对象。
上下文是我想定义一些测试来验证转换器,并且当我从 WS 转换那些非常复杂的对象(带有对象列表的列表......)时,我宁愿获得 Java 代码自动设置断点并指示我要处理的对象。
非常感谢!!
【问题讨论】:
我不认为你会找到一个,因为有多种生成对象的方法(你是否在构造函数、setter/getter 甚至其他方法中传递参数?) 但这可以通过反射调用默认构造函数然后设置器来完成(假设你正在处理Java Beans) 【参考方案1】:添加评论作为答案,因为它很长。
是的,可以像您提到的那样构建一个插件,但是纯 JavaBeans 在 OO 中是一种相当有味道的东西,因此该解决方案仅适用于一小部分开发人员(这可能是没有插件的原因之一)这样做)。
如果对象树很复杂,这(正如您所提到的)还有更多问题。插件在哪里停止生成数据?另一个问题是测试是不可维护的,想象一下你在一个 javabeans 中做一个小改动的场景,然后需要重写 N 个测试来处理新的属性,尽管测试与属性无关(这是不好的测试气味)
如果您想构建测试数据,请查看Test Data Builder Pattern (TDB)。当您可以默认大多数值并且您只需要更改一些特定值时,这是一个很好的方法。它也非常易于维护且可读性强。
【讨论】:
我不同意“这是不好的测试气味”。假设您有一个 WS 客户端,它需要测试从 WS 检索一些数据的方法。将来这可能会发展(添加/删除一些字段,更改结构......)所以你必须确保你的客户仍然可以工作。 还一直说这可以通过反射来完成。遍历对象的字段,识别一组已知类型(String、HashMap……我们知道要生成什么代码),对于未知的类型,尝试一些默认策略(调用默认构造函数,然后调用 setter)并从生成正确的代码。我确信我们会遇到问题,但正如我所说,它将专注于 Java Bean,并且可以自定义添加类型和正确代码之间的映射以模拟对象。以上是关于Eclipse 插件,用于自动创建 Java 代码以重现对象的状态,以便在调试时进行快速测试的主要内容,如果未能解决你的问题,请参考以下文章