我要从一个字符串创建一个 XML。看起来像
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
public Document createCompleteExportXml(String xmlFilename, String content) {
try {
DocumentBuilderFactory documentFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentFactory.newDocumentBuilder();
//create the XML file here
} catch (ParserConfigurationException pce) {
LOGGER.trace("parsing error ", pce);
}
}
现在我必须测试是否可以在 Junit 测试中捕获异常。
@Test(expected=ParserConfigurationException.class)
public void createCompleteExportXmlWithParseConfigurationException() {
String xmlFilename = "junitExportTestWithParseConfigurationException.xml";
String content = "any content";
XmlFileWriter writer = new XmlFileWriter();
Document doc = writer.createCompleteExportXml(xmlFilename, content);
}
如何让这个测试抛出 ParserConfigurationException
?
我让我的问题更具体:如何使 documentFactory.newDocumentBuilder() 无法工作,因为“无法创建满足请求配置的 DocumentBuilder。”?配置在哪里?如何故意将其更改为错误的?
最佳答案
您的测试未通过,因为您准确地捕捉到了 ParserConfigurationException
在你的方法中,所以它永远不会被抛出。要通过测试:
1) 更改方法的签名(抛出异常)
public String createCompleteExportXml(String xmlFilename, String content) throws ParserConfigurationException {
2) 抛出 ParserConfigurationException
.为此,您可以删除 catch block 或在 LOGGER.trace
之后抛出异常。 .第二个选项的示例:
try {
//...
} catch (ParserConfigurationException pce) {
LOGGER.trace("parsing error ", pce);
throw pce;
}
希望对你有帮助
[更新]
如果你想模拟一个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);
}
此测试通过(完成之前的代码建议)。
powerMock 的 Maven 依赖项:
<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>
希望这就是您要找的。p>
关于java - 如何在通过 DocumentBuidlerFactory 创建新的 xml 文件时生成 ParserConfigurationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25645312/