Реализация теста Junit4 с параметрами, переданными из XML, (значение атрибута + значение узла)?

Я знаю, что могу жестко закодировать его (разобрать xml, извлечь), но есть ли способ подачи (значение атрибута + значение узла), как это делается с Feed4TestNG (в настоящее время он поддерживает только файлы csv и excel)?

Я новичок в Java, и любое понимание эксперта будет полезно. Спасибо!

2 ответа

Решение

Тело @Parameters не ограничивается только данными, вы можете использовать любой код Java, который вам нравится в этом методе, в том числе генерировать исключения:

@Parameters
public static Collection<Object[]> data() throws IOException {
    List<Object[]> data = new ArrayList<>();
    // replace getClass() with <nameofclass>.class
    try(InputStream in = this.getClass().getResourceAsStream()) { 
        //parse body here
        data.add(new Object[]{attribute, value});
    }
    return data;
}

В зависимости от того, какую XML-среду вы используете, вам нужно проанализировать ваши XML-узлы и поместить их в список, который вы собираетесь вернуть.

Вот что я в итоге делаю здесь:

Пожалуйста, отправьте свое исправление, если вы думаете, что я могу улучшить свой код.,

@RunWith(Parameterized.class) открытый класс DataDrivenTests {

private String c;
private String b;
private static Collection<Object[]> a;
@Parameters
public static Collection<Object[]> xmlData() throws IOException{

        File file = new File("xmlfile.xml");
        InputStream xml1 = new FileInputStream(file);
        return  new xmlData(xml1).getData();

}



public DataDrivenTests(String c, String b) {
    super();
    this.c = c;
    this.b = b;


}


@Test
public void shouldCalculateATimesB() {
    boolean assertion = false;

    if(c.equals(Parser.parse("Parse this string to Attribute and Value"))){
        assertion = true;

    }

    assertTrue(assertion);


}

}

xmlData.java

открытый класс xmlData {

private transient Collection<Object[]> data = null;

public xmlData(final InputStream xml)throws IOException{

    this.data = loadFromXml(xml);

}

public Collection<Object[]> getData(){

    return data;
}



private Collection<Object[]> loadFromXml(final InputStream xml)
        throws IOException {
List <Object[]> ism_code_map = new ArrayList<Object[]>();

    try{
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    dbFactory.setNamespaceAware(true);
    DocumentBuilder dBuilder;

    dBuilder = dbFactory.newDocumentBuilder();

    Document doc = dBuilder.parse(xml);
    doc.getDocumentElement().normalize();

    XPath xPath = XPathFactory.newInstance().newXPath();

    XPathExpression expression = xPath.compile("//e");


    NodeList nodes = (NodeList) expression.evaluate(doc, XPathConstants.NODESET);

    for (int i =0; i< nodes.getLength(); i++){

        Node nNode = nodes.item(i);
        //System.out.println("\nCurrent Element:" + nNode.getTextContent());

                if (nNode.getNodeType() == Node.ELEMENT_NODE){
                    Element eElement = (Element) nNode;


                    if(eElement.getAttribute("attrname") != null && !eElement.getAttribute("attrname").isEmpty()){

                        code_map.add(new Object[]{"attrname",eElement.getAttribute("attrname")});

                    }


    }catch(ParserConfigurationException e){
        e.printStackTrace();

    }catch(SAXException e){
        e.printStackTrace();

    }catch(IOException e){
        e.printStackTrace();
    }catch(XPathExpressionException e){
        e.printStackTrace();
    }
    catch(NullPointerException e){
        e.printStackTrace();

    }


return code_map;

}

}

Другие вопросы по тегам