Я публикую этот вопрос, и я получил некоторые объяснения, но не смог решить проблему. Теперь, когда у меня появилось лучшее понимание, я собираюсь опубликовать это снова в новом ракурсе.
У меня есть следующие строки в моем узле.
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));
or
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);
StreamSource
, а не создадите его внутри метода? - person Joe   schedule 16.10.2013