Делаю доклад+презентацию про автоматизацию функционального тестирования на Java.
Амбула
Имею честь наблюдать некоторую массу мнений насчет того, что вот есть TestNG, который как бы наше все.
И все в нем есть и всем он хорош. И даже DI/IoC поддерживает с Google Guice.
А JUnit.... ну он так, для юнит-тестирования и только. Написан программистами для программистов.
И не соглашусь с этим всем безобразием.
Туго скрутив документацию по JUnit в сигару и выкурив ее я за полдня сваял Proof of Concept
того что DI/IoC тоже может работать в JUnit.
Ну а если покурить сорсы TestNG там можно обнаружить много всего жирного для такого кодового фашиста как я.
Например такое
@Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { String name = attributes.getValue("name"); // ppp("START ELEMENT uri:" + uri + " sName:" + localName + " qName:" + qName + // " " + attributes); if ("suite".equals(qName)) { xmlSuite(true, attributes); } else if ("suite-file".equals(qName)) { xmlSuiteFile(true, attributes); } else if ("test".equals(qName)) { xmlTest(true, attributes); } else if ("script".equals(qName)) { xmlScript(true, attributes); } else if ("method-selector".equals(qName)) { xmlMethodSelector(true, attributes); } else if ("method-selectors".equals(qName)) { xmlMethodSelectors(true, attributes); } else if ("selector-class".equals(qName)) { xmlSelectorClass(true, attributes); } else if ("classes".equals(qName)) { xmlClasses(true, attributes); } else if ("packages".equals(qName)) { xmlPackages(true, attributes); } else if ("listeners".equals(qName)) { xmlListeners(true, attributes); } else if ("listener".equals(qName)) { xmlListener(true, attributes); } else if ("class".equals(qName)) { // If m_currentClasses is null, the XML is invalid and SAX // will complain, but in the meantime, dodge the NPE so SAX // can finish parsing the file. if (null != m_currentClasses) { m_currentClass = new XmlClass(name, m_currentClassIndex++, m_loadClasses); m_currentClasses.add(m_currentClass); } } else if ("package".equals(qName)) { if (null != m_currentPackages) { m_currentPackage = new XmlPackage(); m_currentPackage.setName(name); m_currentPackages.add(m_currentPackage); } } else if ("define".equals(qName)) { xmlDefine(true, attributes); } else if ("run".equals(qName)) { xmlRun(true, attributes); } else if ("groups".equals(qName)) { m_currentIncludedGroups = Lists.newArrayList(); m_currentExcludedGroups = Lists.newArrayList(); } else if ("methods".equals(qName)) { xmlMethod(true, attributes); } else if ("include".equals(qName)) { xmlInclude(true, attributes); } else if ("exclude".equals(qName)) { if (null != m_currentExcludedMethods) { m_currentExcludedMethods.add(name); } else if (null != m_currentRuns) { m_currentExcludedGroups.add(name); } else if (null != m_currentPackage) { m_currentPackage.getExclude().add(name); } } else if ("parameter".equals(qName)) { String value = attributes.getValue("value"); switch(m_locations.peek()) { case TEST: m_currentTestParameters.put(name, value); break; case SUITE: m_currentSuiteParameters.put(name, value); break; case INCLUDE: m_currentInclude.parameters.put(name, value); } } }
Комментариев нет:
Отправить комментарий