Java 单元测试是否存在类似assertmlequals的东西
在我的测试中,我检查:Java 单元测试是否存在类似assertmlequals的东西,java,html,junit,Java,Html,Junit,在我的测试中,我检查: assertEquals("<div class=\"action-button\" title=\"actionButton\">"</div>", result); 第2条: <ldapConfigurations> <ldapdd tenantid="" active="false"> </ldap> </ldapConfigurations> 但正如你所看到的,它们不是。(请参阅:ld
assertEquals("<div class=\"action-button\" title=\"actionButton\">"</div>", result);
第2条:
<ldapConfigurations>
<ldapdd tenantid="" active="false">
</ldap>
</ldapConfigurations>
但正如你所看到的,它们不是。(请参阅:
ldapdd
)这不一定适用于您的情况,但如果您的HTML恰好是有效的XML,则会。您可以使用名为的工具。使用它,您可以编写如下所示的断言方法:
public static void assertXMLEqual(Reader reader, String xml) {
try {
XMLAssert.assertXMLEqual(reader, new StringReader(xml));
} catch (Exception ex) {
ex.printStackTrace();
XMLAssert.fail();
}
}
如果这对您不起作用,那么可能还有其他用于HTML比较的工具。如果这不起作用,您可能希望最终使用像jtagsoup这样的库(或其他什么),并比较它解析的所有字段是否相等 您可以通过的
TolerantSaxDocumentBuilder
实用程序实现格式错误的HTML断言
要支持格式不正确的HTML(例如没有结束标记的元素,这在XML中是不可想象的),必须使用额外的文档生成器TolerantSaxDocumentBuilder
,以及HTMLDocumentBuilder
(这将允许在网页上断言)。之后,像往常一样断言文档
工作代码示例:
您正在寻找HTML验证器,还是要检查两个
字符串(碰巧有HTML)是否相等?检查两个字符串(碰巧有HTML)是否相等您担心的是类似
的东西等同于
,但不等同于它?您能否显示您的代码,说明如何传递它们?我知道这对我来说是失败的。html在大多数情况下都是xml,所以它可能会有所帮助。我认为这是因为它们不是标准的html标记(它是一个HTMLDocumentBuilder
)。请尝试将“
放在两个字符串之前,将”
放在两个字符串之后。@ses在我将这些字符串添加到字符串之后,它在这里起作用(答案中的方法)。@ses实际上,在字符串的开头(或中间)放置一个简单的“
(或任何其他HTML元素,如”
)就足以提示文档生成器生成HTML。如果您需要经常测试这样的代码片段,我认为您可以在每个测试字符串的开头添加这样的内容?
public static void assertXMLEqual(Reader reader, String xml) {
try {
XMLAssert.assertXMLEqual(reader, new StringReader(xml));
} catch (Exception ex) {
ex.printStackTrace();
XMLAssert.fail();
}
}
TolerantSaxDocumentBuilder tolerantSaxDocumentBuilder =
new TolerantSaxDocumentBuilder(XMLUnit.newTestParser());
HTMLDocumentBuilder htmlDocumentBuilder =
new HTMLDocumentBuilder(tolerantSaxDocumentBuilder);
XMLAssert.assertXMLEqual(htmlDocumentBuilder.parse(expectedHTML),
htmlDocumentBuilder.parse(actualHTML));
public class TestHTML {
public static void main(String[] args) throws Exception {
String result = "<div class=\"action-button\" title=\"actionButton\"> </div>";
assertHTMLEquals("<div class=\"action-button\" title=\"actionButton\"></div>", result); // ok!
// notice it is badly formed
String expectedHtml = "<html><title>Page Title</title>"
+ "<body><h1>Heads<ul>"
+ "<li id='1'>Some Item<li id='2'>Another item";
String actualMalformedHTML = expectedHtml.replace(" ", " "); // just added some spaces, wont matter
assertHTMLEquals(expectedHtml, actualMalformedHTML); // ok!
actualMalformedHTML = actualMalformedHTML.replace("Heads", "Tails");
assertHTMLEquals(expectedHtml, actualMalformedHTML); // assertion fails
}
public static void assertHTMLEquals(String expectedHTML, String actualHTML) throws Exception {
TolerantSaxDocumentBuilder tolerantSaxDocumentBuilder = new TolerantSaxDocumentBuilder(XMLUnit.newTestParser());
HTMLDocumentBuilder htmlDocumentBuilder = new HTMLDocumentBuilder(tolerantSaxDocumentBuilder);
XMLAssert.assertXMLEqual(htmlDocumentBuilder.parse(expectedHTML), htmlDocumentBuilder.parse(actualHTML));
}
}
<dependency>
<groupId>xmlunit</groupId>
<artifactId>xmlunit</artifactId>
<version>1.4</version>
</dependency>