是否可以配置自定义工厂以从EqualsMethodTester
生成HashCodeMethodTester
和org.meanbean.test
类的值?当我将适用于BeanTester
的配置传递给EqualsMethodTester
时,我在错误回溯中收到以下消息:
org.meanbean.factories.ObjectCreationException:无法为属性[demoUrl]创建值。
无法为type = [class java.net.URL]的property = [demoUrl]找到合适的Factory。请注册一个自定义工厂。
org.meanbean.factories.ObjectCreationException:由于NoSuchMethodException,无法实例化[java.net.URL]类型的对象。
java.lang.NoSuchMethodException:java.net.URL.<init>()
(EqualsMethodTester
和HashCodeMethodTester
都会出现此错误。将“demoUrl”添加到insignificantProperties
的{{1}}列表中没有任何区别。单步执行代码意味着我的URLFactory根本没有调用.create()。)
我没有看到将配置传递到EqualsMethodTester().testEqualsMethod()
的任何选项。我在以下网站上浏览了文档,但没有找到解决方案,也没有找到缺少的功能:http://meanbean.sourceforge.net/docs/2.0.3/public/org/meanbean/test/EqualsMethodTester.html
http://meanbean.sourceforge.net/docs/2.0.3/public/org/meanbean/test/HashCodeMethodTester.html
http://meanbean.sourceforge.net/docs/2.0.3/public/org/meanbean/test/ConfigurationBuilder.html
http://meanbean.sourceforge.net/docs/2.0.3/Mean_Bean_2.0.3_User_Guide.pdf
(我正在使用MeanBean v 2.0.3和Java 1.8。)
我有以下课程,使用HashCodeMethodTester
:
java.net.URL
为了处理网址字段,我根据meanbean: failed to test bean with arrays创建了一个自定义工厂,它适用于public class Product {
private String name;
private URL demoUrl;
public Product(){
super();
}
public int hashCode() {
return Objects.hash(getName(), whitehawkSKU);
}
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (obj.getClass() != getClass()) {
return false;
}
Product other = (Product) obj;
return Objects.equals(getName(), other.getName());
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public URL getDemoUrl() {
return demoUrl;
}
public void setDemoUrl(URL demoUrl) {
this.demoUrl = demoUrl;
}
}
,但不适用于BeanTester
:
EqualsMethodTester
我的测试方法如下:
import org.meanbean.lang.Factory;
import java.net.MalformedURLException;
import java.net.URL;
public class URLFactory implements Factory<URL> {
private static int counter = 0;
@Override
public URL create() {
String host = "http://test." + counter + ".url/";
try {
return new URL(host);
}
catch (MalformedURLException except) {
return null;
}
}
}
我错过了什么?
答案 0 :(得分:1)
由于使用EqualsMethodTester().testEqualsMethod()
不提供默认的空构造函数,java.net.URL
在特定情况下看起来需要EquivalentFactory。因此,当为BasicNewObjectInstanceFactory.create()
调用java.net.URL
时,调用clazz.getDeclaredConstructor()
会抛出异常Method threw 'java.lang.NoSuchMethodException' exception.
。
基本上你只需要实现一个EquivalentFactory。
匿名实现可以是:
private EquivalentFactory<Product> productEquivalentFactory = new EquivalentFactory<Product>() {
@Override
public Product create() {
Product p = new Product();
try {
p.setDemoUrl(new URL("http://test.1.url/"));
} catch (MalformedURLException e) {
e.printStackTrace();
}
p.setName("test");
return p;
}
};
It has to be used with the custom configuration that you already have:
新的EqualsMethodTester()。testEqualsMethod(productEquivalentFactory,configureMeanBeanTests(),“demoUrl”);`
对于哈希码,只需使用等效的工厂即可完成工作。
我测试了它并且它正在工作。