Issue
I am writing Junit test cases for an Application and again and again I have to build dummy Document object
and set root element and every other elements according to my original response so as to pass in my Mockito.when(m1()).thenReturn(respDoc)
. The code is something like this
Code Starts
Document respDoc = new Document();
Element elem = new Element("RootElement");
respDoc.setRootElement(elem);
Element node1 = new Element("Nodes").addContent("FirstNode");
elem.add(node1);
**And So On...**
Code Ends
Sometimes the response xml is so big that it takes all of my time just to create this Document
object. Is there any way where I can just pass this whole XML
and it gives me the desired output.
Please let me know if theres any confusion. Thanks in advance!
Solution
Assuming Document
is from JDOM Library:
You need the following dependency:
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom2</artifactId>
<version>2.0.6.1</version>
</dependency>
Then you parse it:
import org.jdom2.Document;
import org.jdom2.input.SAXBuilder;
String FILENAME = "src/main/resources/staff.xml";
SAXBuilder sax = new SAXBuilder();
Document doc = sax.build(new File(FILENAME));
Mockito.when(m1()).thenReturn(doc);
Reference: https://mkyong.com/java/how-to-read-xml-file-in-java-jdom-example/
Well the documentation states you can use an InputStream:
http://www.jdom.org/docs/apidocs/org/jdom2/input/SAXBuilder.html Example:
String yourXmlString = "<xml>";
InputStream stringStream = new ByteArrayInputStream(yourXmlString .getBytes("UTF-8"));
SAXBuilder sax = new SAXBuilder();
Document doc = sax.build(stringStream );
Answered By - JCompetence
Answer Checked By - Pedro (JavaFixing Volunteer)