请求协助编写convertStringToDocument方法的JUnit测试用例
没问题,我来帮你搞定这个方法的JUnit测试用例!首先先提个小细节:你当前的代码里// return doc;被注释掉了,最后不管转换成功还是失败都会返回null,这明显不符合逻辑,所以我先假设你把这条注释去掉,让方法在转换成功时返回对应的Document对象,失败时返回null,基于这个修正后的逻辑来写测试用例。
第一步:准备测试依赖
如果是用Maven管理项目,先确保引入JUnit 5的依赖(如果是JUnit 4的话语法略有不同,这里以主流的JUnit 5为例):
<dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.9.2</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.9.2</version> <scope>test</scope> </dependency> <!-- 要验证Document内容的话,还需要引入W3C DOM的依赖 --> <dependency> <groupId>org.w3c</groupId> <artifactId>dom</artifactId> <version>2.3.0-jaxb-1.0.6</version> <scope>test</scope> </dependency>
第二步:编写测试用例
我们需要覆盖正常场景和各种异常场景,下面是完整的测试类代码:
import org.junit.jupiter.api.Test; import org.w3c.dom.Document; import org.w3c.dom.Element; import static org.junit.jupiter.api.Assertions.*; // 假设你的convertStringToDocument方法在XmlConverter这个工具类里 public class XmlConverterTest { @Test void convertStringToDocument_ValidXml_ReturnsDocumentWithCorrectContent() { // 准备格式正确的测试XML String validXml = "<user><id>101</id><username>charan</username></user>"; Document result = XmlConverter.convertStringToDocument(validXml); // 先断言转换成功,结果不为null assertNotNull(result); // 进一步验证Document的内容是否和输入一致 Element root = result.getDocumentElement(); assertEquals("user", root.getNodeName()); assertEquals("101", root.getElementsByTagName("id").item(0).getTextContent()); assertEquals("charan", root.getElementsByTagName("username").item(0).getTextContent()); } @Test void convertStringToDocument_InvalidXml_ReturnsNull() { // 准备格式错误的XML(比如标签未闭合) String invalidXml = "<user><id>101</id><username>charan</userr>"; Document result = XmlConverter.convertStringToDocument(invalidXml); // 解析失败,断言结果为null assertNull(result); } @Test void convertStringToDocument_XmlWithDoctype_ReturnsNull() { // 准备包含DOCTYPE声明的XML,你的方法禁用了DOCTYPE,所以会解析失败 String xmlWithDoctype = "<!DOCTYPE user SYSTEM \"user.dtd\"><user><id>101</id></user>"; Document result = XmlConverter.convertStringToDocument(xmlWithDoctype); assertNull(result); } @Test void convertStringToDocument_NullInput_ReturnsNull() { Document result = XmlConverter.convertStringToDocument(null); assertNull(result); } @Test void convertStringToDocument_EmptyString_ReturnsNull() { Document result = XmlConverter.convertStringToDocument(""); assertNull(result); } }
测试用例说明
- 有效XML场景:验证正常输入能成功转换,并且Document的内容和输入XML匹配,确保方法的核心功能正常。
- 无效XML场景:测试格式错误的XML,此时会抛出SAXException,方法捕获后返回null。
- 含DOCTYPE的XML场景:因为你的方法设置了
disallow-doctype-decl为true,这类XML会被拒绝解析,所以断言返回null。 - 空/Null输入场景:覆盖边界情况,确保输入非法时方法不会崩溃,返回预期的null。
额外建议
如果你觉得当前方法捕获异常返回null的方式不够直观,也可以改成让方法直接抛出异常(去掉try-catch),这样测试用例可以用assertThrows来验证特定异常的抛出,比如:
@Test void convertStringToDocument_InvalidXml_ThrowsSAXException() { String invalidXml = "<user><id>101</id><username>charan</userr>"; assertThrows(SAXException.class, () -> XmlConverter.convertStringToDocument(invalidXml)); }
内容的提问来源于stack exchange,提问作者Charan
相关产品推荐
相关产品推荐

