Вы можете использовать grep -ilR
:
grep -Ril "text-to-find-here" /
i
означает случай игнорирования (необязательно в вашем случае). R
означает рекурсивный. l
означает «показать имя файла, а не сам результат». /
означает начало в корне вашей машины. Ваш тест не проходит, потому что вы точно ловите ParserConfigurationException
в своем методе, поэтому его никогда не бросают. Чтобы пройти тест:
1) измените подпись вашего метода (исключение бросания)
public String createCompleteExportXml(String xmlFilename, String content) throws ParserConfigurationException {
2) Бросьте ParserConfigurationException
. Для этого вы можете удалить блок catch или выбросить исключение после LOGGER.trace
. Пример для второго варианта:
try {
//...
} catch (ParserConfigurationException pce) {
LOGGER.trace("parsing error ", pce);
throw pce;
}
Надеюсь, он вам поможет
[UPDATE]
Если вы хотите имитировать ParserConfigurationException
, вы можете использовать фреймворк, подобный Mockito / PowerMock
, чтобы высмеять DocumentBuilderFactory
и имитировать, что ParserConfigurationException
вызывается, когда вызывается метод newDocumentBuilder()
.
Пример:
@RunWith(PowerMockRunner.class)
@PrepareForTest(DocumentBuilderFactory.class)
public class XmlFileWriterTest {
@Test(expected = ParserConfigurationException.class)
public void createCompleteExportXmlWithParseConfigurationException() throws Exception {
String xmlFilename = "junitExportTestWithParseConfigurationException.xml";
String content = "any content";
XmlFileWriter writer = new XmlFileWriter();
// Mock DocumentBuilderFactory: When method newDocumentBuilder() is called, throws a simulated ParserConfigurationException
DocumentBuilderFactory mockDocumentBuilderFactory = PowerMockito.mock(DocumentBuilderFactory.class);
PowerMockito.when(mockDocumentBuilderFactory.newDocumentBuilder()).thenThrow(new ParserConfigurationException("Simulated ex"));
// Mock DocumentBuilderFactory.newInstance(), when is called, returns your mock instance mockDocumentBuilderFactory
PowerMockito.mockStatic(DocumentBuilderFactory.class);
PowerMockito.when(DocumentBuilderFactory.newInstance()).thenReturn(mockDocumentBuilderFactory);
writer.createCompleteExportXml(xmlFilename, content);
}
Этот тестовый проход ( с предыдущими предложениями кода).
Зависимости Maven для powerMock:
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.5.4</version>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.5.4</version>
</dependency>
Надеюсь, это будет то, что вы ищете.
Я не думаю, что какой-либо из существующих ответов действительно ответил на вопрос, так что вот мой подход к этому.
Подходите к одному, пользуясь внутренними компонентами com.sun. *:
(класс-помощник)
import com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.validation.Schema;
import javax.xml.validation.Validator;
import javax.xml.validation.ValidatorHandler;
public class MisconfiguredDocumentBuilderFactory extends DocumentBuilderFactoryImpl {
@Override
public DocumentBuilder newDocumentBuilder() throws ParserConfigurationException {
super.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage",
"http://www.w3.org/2001/XMLSchema");
super.setSchema(new Schema() {
@Override
public Validator newValidator() {
return null;
}
@Override
public ValidatorHandler newValidatorHandler() {
return null;
}
});
return super.newDocumentBuilder();
}
}
(Фактический тестовый класс)
public class OPClassTest {
private final static String DOC_BUILDER_PROPERTY_NAME =
"javax.xml.parsers.DocumentBuilderFactory";
@Test
public void testParserConfigurationProblem() {
System.setProperty(DOC_BUILDER_PROPERTY_NAME,
MisconfiguredDocumentBuilderFactory.class.getCanonicalName());
targetClass.createCompleteExportXml("somefilename", "somecontent");
}
@After
public void tearDown() {
System.clearProperty(DOC_BUILDER_PROPERTY_NAME);
}
}
Подход 2 без использования com.sun. * namespaces
(Класс помощника)
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
public class MisconfiguredDocumentBuilderFactory2 extends DocumentBuilderFactory {
@Override
public DocumentBuilder newDocumentBuilder() throws ParserConfigurationException {
throw new ParserConfigurationException(
"this factory is not configured properly");
}
@Override
public void setAttribute(String name, Object value) throws IllegalArgumentException {
// no-op
}
@Override
public Object getAttribute(String name) throws IllegalArgumentException {
return null;
}
@Override
public void setFeature(String name, boolean value) throws ParserConfigurationException {
// no-op
}
@Override
public boolean getFeature(String name) throws ParserConfigurationException {
return false;
}
}
(Фактический тестовый класс)
public class OPClassTest {
private final static String DOC_BUILDER_PROPERTY_NAME =
"javax.xml.parsers.DocumentBuilderFactory";
@Test
public void testParserConfigurationProblem() {
System.setProperty(DOC_BUILDER_PROPERTY_NAME,
MisconfiguredDocumentBuilderFactory2.class.getCanonicalName());
targetClass.createCompleteExportXml("somefilename", "somecontent");
}
@After
public void tearDown() {
System.clearProperty(DOC_BUILDER_PROPERTY_NAME);
}
}