1

この質問を投稿し、いくつかの説明を受けましたが、問題を解決できませんでした。イベント以来、理解が深まりましたので、これを新しい角度で再度投稿します。

ノードに次の行があります。

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));

私には2つの選択肢があると思います。嘲笑するか

Source schemaFile = new StreamSource(getClass().getClassLoader().getResourceAsStream(schemaName));

また

Schema schema = factory.newSchema(schemaFile);

私は最初の髪をするために2日間髪を引っ張っています. 私は次のように試しました

expectNew(StreamSource.class, InputStream.class).andReturn(mockSource);

expectNew(StreamSource.class, anyObject(InputStream.class)).andReturn(mockSource);

しかし、うまくいきませんでした。

今、私は2行目をモックしようとしています

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入力ストリームを期待する方法。nullだけを使ってみました。うまくいきませんでした。

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

1 に答える 1