org.testng.TestClass Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of testng Show documentation
Show all versions of testng Show documentation
A testing framework for the JVM
package org.testng;
import org.testng.collections.Lists;
import org.testng.collections.Objects;
import org.testng.internal.*;
import org.testng.internal.annotations.IAnnotationFinder;
import org.testng.log4testng.Logger;
import org.testng.xml.XmlClass;
import org.testng.xml.XmlTest;
import java.util.List;
/**
* This class represents a test class:
* - The test methods
* - The configuration methods (test and method)
* - The class file
*/
class TestClass extends NoOpTestClass implements ITestClass {
private IAnnotationFinder annotationFinder = null;
// The Strategy used to locate test methods (TestNG, JUnit, etc...)
private ITestMethodFinder testMethodFinder = null;
private IClass iClass = null;
private String testName;
private XmlTest xmlTest;
private XmlClass xmlClass;
private static final Logger LOG =Logger.getLogger(TestClass.class);
protected TestClass(IClass cls,
ITestMethodFinder testMethodFinder,
IAnnotationFinder annotationFinder,
RunInfo runInfo,
XmlTest xmlTest,
XmlClass xmlClass) {
init(cls, testMethodFinder, annotationFinder, xmlTest, xmlClass);
}
@Override
public String getTestName() {
return testName;
}
@Override
public XmlTest getXmlTest() {
return xmlTest;
}
@Override
public XmlClass getXmlClass() {
return xmlClass;
}
public IAnnotationFinder getAnnotationFinder() {
return annotationFinder;
}
private void init(IClass cls,
ITestMethodFinder testMethodFinder,
IAnnotationFinder annotationFinder,
XmlTest xmlTest,
XmlClass xmlClass)
{
log(3, "Creating TestClass for " + cls);
iClass = cls;
m_testClass = cls.getRealClass();
this.xmlTest = xmlTest;
this.xmlClass = xmlClass;
this.testMethodFinder = testMethodFinder;
this.annotationFinder = annotationFinder;
initTestClassesAndInstances();
initMethods();
}
private void initTestClassesAndInstances() {
//
// TestClasses and instances
//
Object[] instances = getInstances(false);
for (Object instance : instances) {
if (instance instanceof ITest) {
testName = ((ITest) instance).getTestName();
break;
}
}
if (testName == null) {
testName = iClass.getTestName();
}
}
@Override
public Object[] getInstances(boolean create) {
return iClass.getInstances(create);
}
@Override
public long[] getInstanceHashCodes() {
return iClass.getInstanceHashCodes();
}
@Deprecated
@Override
public int getInstanceCount() {
return iClass.getInstanceCount();
}
@Override
public void addInstance(Object instance) {
iClass.addInstance(instance);
}
private void initMethods() {
ITestNGMethod[] methods = testMethodFinder.getTestMethods(m_testClass, xmlTest);
m_testMethods = createTestMethods(methods);
for (Object instance : iClass.getInstances(false)) {
m_beforeSuiteMethods = ConfigurationMethod
.createSuiteConfigurationMethods(testMethodFinder.getBeforeSuiteMethods(m_testClass),
annotationFinder,
true,
instance);
m_afterSuiteMethods = ConfigurationMethod
.createSuiteConfigurationMethods(testMethodFinder.getAfterSuiteMethods(m_testClass),
annotationFinder,
false,
instance);
m_beforeTestConfMethods = ConfigurationMethod
.createTestConfigurationMethods(testMethodFinder.getBeforeTestConfigurationMethods(m_testClass),
annotationFinder,
true,
instance);
m_afterTestConfMethods = ConfigurationMethod
.createTestConfigurationMethods(testMethodFinder.getAfterTestConfigurationMethods(m_testClass),
annotationFinder,
false,
instance);
m_beforeClassMethods = ConfigurationMethod
.createClassConfigurationMethods(testMethodFinder.getBeforeClassMethods(m_testClass),
annotationFinder,
true,
instance);
m_afterClassMethods = ConfigurationMethod
.createClassConfigurationMethods(testMethodFinder.getAfterClassMethods(m_testClass),
annotationFinder,
false,
instance);
m_beforeGroupsMethods = ConfigurationMethod
.createBeforeConfigurationMethods(testMethodFinder.getBeforeGroupsConfigurationMethods(m_testClass),
annotationFinder,
true,
instance);
m_afterGroupsMethods = ConfigurationMethod
.createAfterConfigurationMethods(testMethodFinder.getAfterGroupsConfigurationMethods(m_testClass),
annotationFinder,
false,
instance);
m_beforeTestMethods = ConfigurationMethod
.createTestMethodConfigurationMethods(testMethodFinder.getBeforeTestMethods(m_testClass),
annotationFinder,
true,
instance);
m_afterTestMethods = ConfigurationMethod
.createTestMethodConfigurationMethods(testMethodFinder.getAfterTestMethods(m_testClass),
annotationFinder,
false,
instance);
}
}
/**
* Create the test methods that belong to this class (rejects
* all those that belong to a different class).
*/
private ITestNGMethod[] createTestMethods(ITestNGMethod[] methods) {
List vResult = Lists.newArrayList();
for (ITestNGMethod tm : methods) {
ConstructorOrMethod m = tm.getConstructorOrMethod();
if (m.getDeclaringClass().isAssignableFrom(m_testClass)) {
for (Object o : iClass.getInstances(false)) {
log(4, "Adding method " + tm + " on TestClass " + m_testClass);
vResult.add(new TestNGMethod(/* tm.getRealClass(), */ m.getMethod(), annotationFinder, xmlTest,
o));
}
}
else {
log(4, "Rejecting method " + tm + " for TestClass " + m_testClass);
}
}
return vResult.toArray(new ITestNGMethod[vResult.size()]);
}
public ITestMethodFinder getTestMethodFinder() {
return testMethodFinder;
}
private void log(int level, String s) {
Utils.log("TestClass", level, s);
}
protected void dump() {
LOG.info("===== Test class\n" + m_testClass.getName());
for (ITestNGMethod m : m_beforeClassMethods) {
LOG.info(" @BeforeClass " + m);
}
for (ITestNGMethod m : m_beforeTestMethods) {
LOG.info(" @BeforeMethod " + m);
}
for (ITestNGMethod m : m_testMethods) {
LOG.info(" @Test " + m);
}
for (ITestNGMethod m : m_afterTestMethods) {
LOG.info(" @AfterMethod " + m);
}
for (ITestNGMethod m : m_afterClassMethods) {
LOG.info(" @AfterClass " + m);
}
LOG.info("======");
}
@Override
public String toString() {
return Objects.toStringHelper(getClass())
.add("name", m_testClass)
.toString();
}
public IClass getIClass() {
return iClass;
}
}