繁体   English   中英

调用和测试Java方法

[英]Calling and Testing java method

我已经构建了一些代码来提取XML文档并解析值,但是现在我仍在测试该方法。

用这种方法进行单元测试的正确方法是什么? 我也不确定如何传递xml文档来运行。

public class WebServiceTools 
{

static public String getVersionFromWSResponseFromDOM(Document responseDocument) {
        String versionDataAsXML = badData;

        try {           
            responseDocument.normalizeDocument();
            NodeList resultList = responseDocument.getElementsByTagName("ti:VersionResponse");
            Element resultElement = (Element) resultList.item(0);

            if (!badData.equalsIgnoreCase(resultElement.getTextContent())) {
                versionDataAsXML = resultElement.getTextContent().trim();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return versionDataAsXML;
    }
}


package org.examples.tools;

import java.lang.reflect.Method;

public class ReflectApp {

public static void main(String[] args) {

//String parameter
Class[] paramString = new Class[1]; 
paramString[0] = String.class;


try{
        //load the AppTest at runtime
    Class cls = Class.forName("org.examples.tools.WebServiceTools");
    Object obj = cls.newInstance();

    //call the printItString method, pass a String param 
    method = cls.getDeclaredMethod("printItString", paramString);
    method.invoke(obj, new String(" Do I put document here?  "));


}catch(Exception ex){
    ex.printStackTrace();
}

}

package org.examples.tools;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;

public class TestGetVersion {

public static void main (String[] args) throws Exception { 

    String fileName = "C:/examples/VersionResponse.xml"; // Set path to file
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(new File(fileName));
    // Create do
    String result = WebServiceTools.getVersionFromWSResponseFromDOM(doc); 
    // Treat result

   System.out.print(result);

}
}

我了解您的问题是如何将XML文件读取到Document ,对吗?

有几种方法和库可以从文件中读取XML: Java:如何读取和写入xml文件?

例如:

String fileName = ""; // Set path to file
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(new File(fileName));

然后,只需从main函数或JUnit测试调用您的方法:

public static void main (String[] args) { 
    // Create doc
    String result = WebServiceTools.getVersionFromWSResponseFromDOM(doc); 
    // Treat result
}

更新

反射

您的cls.getDeclaredMethod("printItString", paramString); 是正确的,尽管使用这样的参数会造成混淆。 乍一看,我以为是String 我最好使用

Method method = cls.getDeclaredMethod("printItString", new Class[] {String.class});

我认为这更清楚了(只是我的看法)。

通过反思打电话就是你所做的。 没用吗?

Object result = method.invoke(obj, new Object[] {"whatever string"});

我假设printStringWebServiceTools类上的方法,其签名为printString(String param)

Unmarshall

首先,第一件事:据我所知, unmarshall通常用于将XML转换回Object(在XML序列化库中,例如XStreamJABX ),但是我想您的意思是将Document转换回String 我对吗?

如果是这样,一种可行的方法是:

Source source = new DOMSource(doc);
StringWriter writer = new StringWriter();
Result result = new StreamResult(writer);

// create a transformer
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer        transformer  = transFactory.newTransformer();

// set some options on the transformer
transformer.setOutputProperty(OutputKeys.ENCODING, encoding);
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");

// transform the xml document into a string
transformer.transform(source, result);

String xml = writer.getBuffer().toString();

如果这不是您的意思,请澄清。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM