我发布了这个问题并得到了一些解释,但我无法解决问题。现在自从事件我有了更好的理解,我将以一个新的角度再次发布这个。
我的节点中有以下几行。
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
/*
* Associate the schema factory with the resource resolver, which is
* responsible for resolving the imported XSD's
*/
factory.setResourceResolver(new ResourceResolver());
Source schemaFile = new StreamSource(getClass().getClassLoader().getResourceAsStream(schemaName));
Schema schema = factory.newSchema(schemaFile);
Validator validator = schema.newValidator();
validator.validate(new DOMSource(document));
我想我有两个选择。要么嘲笑
Source schemaFile = new StreamSource(getClass().getClassLoader().getResourceAsStream(schemaName));
或者
Schema schema = factory.newSchema(schemaFile);
我已经拉了两天的头发来做第一个。我尝试如下
expectNew(StreamSource.class, InputStream.class).andReturn(mockSource);
和
expectNew(StreamSource.class, anyObject(InputStream.class)).andReturn(mockSource);
但是没有用。
现在我试图模拟第二行
Schema schema = factory.newSchema(schemaFile);
这个我也不太清楚。我需要像这样模拟工厂吗
SchemaFactory mockFactory = EasyMock.createMock(SchemaFactory.class);
或者由于工厂是使用 newInstance 静态方法调用创建的,这是一种不同的方式吗?
感谢对此问题的任何帮助。
稍后添加
我对这种情况有所了解。我有 expectNew 如下。
expectNew(StreamSource.class, InputStream.class).andReturn(mockStreamSource);
当我运行 powermocks 时会抛出一个错误提示。
java.lang.AssertionError:
Unexpected constructor call javax.xml.transform.stream.StreamSource(null):
javax.xml.transform.stream.StreamSource(class java.io.InputStream): expected: 1, actual: 0
原因是我认为 getClass().getClassLoader().getResourceStream("..") 无论如何都会返回 null。所以 powermock 并没有发现它与我由 expectNew 描述的初始化相同。怎么说期望一个空输入流作为参数。我尝试只使用null。没用。
expectNew(StreamSource.class, null).andReturn(mockStreamSource);