package org.testng.internal;

import org.testng.ITestClass;
import org.testng.ITestNGMethod;
import org.testng.annotations.ITestAnnotation;
import org.testng.internal.annotations.AnnotationHelper;
import org.testng.internal.annotations.IAnnotationFinder;
import org.testng.xml.XmlClass;
import org.testng.xml.XmlInclude;
import org.testng.xml.XmlTest;

import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

This class represents a test method.
/** * This class represents a test method. */
public class TestNGMethod extends BaseTestMethod { private int m_threadPoolSize = 0; private int m_invocationCount = 1; private int m_successPercentage = 100;
Constructs a TestNGMethod
Params:
  • method –
  • finder –
/** * Constructs a <code>TestNGMethod</code> * * @param method * @param finder */
public TestNGMethod(Method method, IAnnotationFinder finder, XmlTest xmlTest, Object instance) { this(method, finder, true, xmlTest, instance); } private TestNGMethod(Method method, IAnnotationFinder finder, boolean initialize, XmlTest xmlTest, Object instance) { super(method.getName(), method, finder, instance); setXmlTest(xmlTest); if(initialize) { init(xmlTest); } }
{@inheritDoc}
/** * {@inheritDoc} */
@Override public int getInvocationCount() { return m_invocationCount; }
{@inheritDoc}
/** * {@inheritDoc} */
@Override public int getSuccessPercentage() { return m_successPercentage; }
{@inheritDoc}
/** * {@inheritDoc} */
@Override public boolean isTest() { return true; } private void init(XmlTest xmlTest) { setXmlTest(xmlTest); setInvocationNumbers(xmlTest.getInvocationNumbers( m_method.getDeclaringClass().getName() + "." + m_method.getName())); { ITestAnnotation testAnnotation = AnnotationHelper.findTest(getAnnotationFinder(), m_method.getMethod()); if (testAnnotation == null) { // Try on the class testAnnotation = AnnotationHelper.findTest(getAnnotationFinder(), m_method.getDeclaringClass()); } if (null != testAnnotation) { setTimeOut(testAnnotation.getTimeOut()); m_successPercentage = testAnnotation.getSuccessPercentage(); setInvocationCount(testAnnotation.getInvocationCount()); setThreadPoolSize(testAnnotation.getThreadPoolSize()); setAlwaysRun(testAnnotation.getAlwaysRun()); setDescription(findDescription(testAnnotation, xmlTest)); setEnabled(testAnnotation.getEnabled()); setRetryAnalyzer(testAnnotation.getRetryAnalyzer()); setSkipFailedInvocations(testAnnotation.skipFailedInvocations()); setInvocationTimeOut(testAnnotation.invocationTimeOut()); setIgnoreMissingDependencies(testAnnotation.ignoreMissingDependencies()); setPriority(testAnnotation.getPriority()); } // Groups { initGroups(ITestAnnotation.class); } } } private String findDescription(ITestAnnotation testAnnotation, XmlTest xmlTest) { String result = testAnnotation.getDescription(); if (result == null) { List<XmlClass> classes = xmlTest.getXmlClasses(); for (XmlClass c : classes) { if (c.getName().equals(m_method.getMethod().getDeclaringClass().getName())) { for (XmlInclude include : c.getIncludedMethods()) { if (include.getName().equals(m_method.getName())) { result = include.getDescription(); if (result != null) { break; } } } } } } return result; }
{@inheritDoc}
/** * {@inheritDoc} */
@Override public int getThreadPoolSize() { return m_threadPoolSize; }
Sets the number of threads on which this method should be invoked.
/** * Sets the number of threads on which this method should be invoked. */
@Override public void setThreadPoolSize(int threadPoolSize) { m_threadPoolSize = threadPoolSize; }
Sets the number of invocations for this method.
/** * Sets the number of invocations for this method. */
@Override public void setInvocationCount(int counter) { m_invocationCount= counter; }
Clones the current TestNGMethod and its @BeforeMethod and @AfterMethod methods.
See Also:
/** * Clones the current <code>TestNGMethod</code> and its @BeforeMethod and @AfterMethod methods. * @see org.testng.internal.BaseTestMethod#clone() */
@Override public BaseTestMethod clone() { TestNGMethod clone= new TestNGMethod(getConstructorOrMethod().getMethod(), getAnnotationFinder(), false, getXmlTest(), getInstance()); ITestClass tc= getTestClass(); NoOpTestClass testClass= new NoOpTestClass(tc); testClass.setBeforeTestMethods(clone(tc.getBeforeTestMethods())); testClass.setAfterTestMethod(clone(tc.getAfterTestMethods())); clone.m_testClass= testClass; clone.setDate(getDate()); clone.setGroups(getGroups()); clone.setGroupsDependedUpon(getGroupsDependedUpon(), Collections.<String>emptyList()); clone.setMethodsDependedUpon(getMethodsDependedUpon()); clone.setAlwaysRun(isAlwaysRun()); clone.m_beforeGroups= getBeforeGroups(); clone.m_afterGroups= getAfterGroups(); clone.m_currentInvocationCount= m_currentInvocationCount; clone.setMissingGroup(getMissingGroup()); clone.setThreadPoolSize(getThreadPoolSize()); clone.setDescription(getDescription()); clone.setEnabled(getEnabled()); clone.setParameterInvocationCount(getParameterInvocationCount()); clone.setInvocationCount(getInvocationCount()); clone.m_successPercentage = getSuccessPercentage(); clone.setTimeOut(getTimeOut()); clone.setRetryAnalyzer(getRetryAnalyzer()); clone.setSkipFailedInvocations(skipFailedInvocations()); clone.setInvocationNumbers(getInvocationNumbers()); clone.setPriority(getPriority()); return clone; } private ITestNGMethod[] clone(ITestNGMethod[] sources) { ITestNGMethod[] clones= new ITestNGMethod[sources.length]; for(int i= 0; i < sources.length; i++) { clones[i]= sources[i].clone(); } return clones; }
Sorts ITestNGMethod by Class name.
/** Sorts ITestNGMethod by Class name. */
public static final Comparator<ITestNGMethod> SORT_BY_CLASS = new Comparator<ITestNGMethod>() { @Override public int compare(ITestNGMethod o1, ITestNGMethod o2) { String c1 = o1.getTestClass().getName(); String c2 = o2.getTestClass().getName(); return c1.compareTo(c2); } }; }