接着上文继续分析testRunner的privateRun的流程。
上一篇讲清楚了,测试方法执行前的一些准备工作。包括执行的方法,顺序等等。
接下来要分析两个事情:
1、testrunner的上下文从何而来,如何定义的
2、测试结果是如何收集的,就是testresult的多线程处理
/**
* Run all the ITestNGMethods passed in through the constructor.
*
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
for (IMethodInstance testMthdInst : m_methodInstances) {
ITestNGMethod testMethod = testMthdInst.getMethod();
ITestClass testClass = testMethod.getTestClass();
invokeBeforeClassMethods(testClass, testMthdInst);
// Invoke test method
try {
invokeTestMethods(testMethod, testMthdInst.getInstances(), m_testContext);
}
finally {
invokeAfterClassMethods(testClass, testMthdInst);
}
}
}
多线程的run方法的定义。上下文是m_testContext。这变量在TestMethodWorker里边是final
private final ITestContext m_testContext;
public TestMethodWorker(IInvoker invoker,
IMethodInstance[] testMethods,
XmlSuite suite,
Map<String, String> parameters,
ITestNGMethod[] allTestMethods,
ConfigurationGroupMethods groupMethods,
ClassMethodMap classMethodMap,
ITestContext testContext)
{
层层调用。一步步的回朔回去。
testRunner的调用。上下文传的是testrunner本身。
public class TestRunner
implements ITestContext, ITestResultN