create a StreamSource with getClass().getClassLoader().getRe



我发布了这个问题,我得到了一些解释,但我无法解决问题。现在,自从事件以来,我有了更好的理解,我将以新的角度再次发布此内容。

我的节点中有以下行。

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(StreamSource.class, InputStream.class).andReturn(mockStreamSource);

当我运行电源模拟时,会抛出一个错误说。

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 初始化有关。如何说期望空输入流作为参数。我尝试只使用空。没用。

expectNew(StreamSource.class, null).andReturn(mockStreamSource);

如果您使用的是 easymock:

将工厂的创建提取到受保护的方法。

protected SchemaFactory createSchemaFactory(){
  return SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
}

在测试中,SUT 本身不是测试,而是创建 SUT 的部分模拟版本,仅模拟完成静态调用的新方法,并对其进行测试。使用易莫克进行部分模拟。

相关内容

  • 没有找到相关文章

最新更新