TestNG入门——@DataProvider

一 、基本用法

package test;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;


public class BetweenValue {
	//待测试方法
	public boolean isBetween(int n, int lower, int upper){
		
		if( n >= lower && n <= upper){
			return true;
		}
		else return false;
			
	}
	//测试方法
	@Test(dataProvider = "range-provider")
	public void testIsBetween(int n, int lower, int upper, boolean expected){
		System.out.println("received n "+ n + "lower " + lower + "upper " + upper + " expected" + expected);
		Assert.assertEquals(expected, isBetween(n,lower,upper));
		
				
	}
	
	//测试方法的数据源
	@DataProvider(name="range-provider")
	public Object[][] rangeData(){
		
		return new Object[][]{{5,5,10,false}};
		}

	
}

二、TestNG在调用数据提供者之前会设置两个参数(Method,ITestcontext),这两个参数为提供了某种上下文,然后再决定做什么

1、Method参数(java.lang.reflect.Method), 如下代码显示数据提供者会根据method的值不同而返回不同的数据

package test;
import org.testng.annotations.Test;

import java.lang.reflect.Method;

import org.testng.annotations.DataProvider;
public class DataMethod {
	@DataProvider
	public Object[][] provideNumbers(Method method){
		Object [][] result =null;
		if(method.getName().equals("two")){
			result = new Object[][]{ new Object[]{2}};
		}else if (method.getName().equals("three")){
			result = new Object[][]{ new Object[]{3}};
		}
		return result;
	}
	
	@Test(dataProvider="provideNumbers")
	public void  two(int param){
		System.out.println("Method two received:" + param);
	}
	
	@Test(dataProvider="provideNumbers")
	public void three(int param){
		System.out.println("Method three received:" + param);
	}

}
2、ITestcontext, ITestcontext支持的完整的属性内容可以查阅  org.testng.ITestcontext 源码

package test;
import org.testng.annotations.Test;
import java.util.Arrays;

import org.testng.ITestContext;
import org.testng.annotations.DataProvider;
public class DataGroup {
	@DataProvider
	public Object[][] provideNumbers(ITestContext context){
		Object [][] result =null;
		String[]  groups = context.getIncludedGroups();
		//String testName = context.getName();
		//执行的组中包含groupOne则数据为3		
		if(Arrays.asList(groups).contains("groupOne")){
			result = new Object[][]{ new Object[]{2}};
		}else {
			result = new Object[][]{ new Object[]{3}};
		}
		return result;
		
	/*	
	 *执行的用例名为"Group Test1"则返回3
	 * if(testName.equals("Group Test1")){
			result = new Object[][]{ new Object[]{3}};
			
		}
		return result;
	}*/
	}
	
	@Test(dataProvider="provideNumbers", groups={"groupOne","groupTwo"})
	public void  two(int param){
		System.out.println("Method two received:" + param);
	}
	
	

}
ITestContext支持的属性列表:
package org.testng;

import com.google.inject.Injector;
import com.google.inject.Module;

import org.testng.internal.ClassImpl;
import org.testng.xml.XmlTest;

import java.util.Collection;
import java.util.Date;
import java.util.List;


/**
 * This class defines a test context which contains all the information
 * for a given test run.  An instance of this context is passed to the
 * test listeners so they can query information about their
 * environment.
 *
 * @author Cedric Beust, Aug 6, 2004
 */
public interface ITestContext extends IAttributes {

  /**
   * The name of this test.
   */
  public String getName();

  /**
   * When this test started running.
   */
  public Date getStartDate();

  /**
   * When this test stopped running.
   */
  public Date getEndDate();

  /**
   * @return A list of all the tests that run successfully.
   */
  public IResultMap getPassedTests();

  /**
   * @return A list of all the tests that were skipped
   */
  public IResultMap  getSkippedTests();

  /**
   * @return A list of all the tests that failed but are being ignored because
   * annotated with a successPercentage.
   */
  public IResultMap  getFailedButWithinSuccessPercentageTests();

  /**
   * @return A map of all the tests that passed, indexed by
   * their ITextMethor.
   *
   * @see org.testng.ITestNGMethod
   */
  public IResultMap getFailedTests();

  /**
   * @return All the groups that are included for this test run.
   */
  public String[] getIncludedGroups();

  /**
   * @return All the groups that are excluded for this test run.
   */
  public String[] getExcludedGroups();

  /**
   * @return Where the reports will be generated.
   */
  public String getOutputDirectory();

  /**
   * @return The Suite object that was passed to the runner
   * at start-up.
   */
  public ISuite getSuite();

  /**
   * @return All the test methods that were run.
   */
  public ITestNGMethod[] getAllTestMethods();

  /**
   * @return The host where this test was run, or null if it was run locally.  The
   * returned string has the form:  host:port
   */
  public String getHost();

  /**
   * @return All the methods that were not included in this test run.
   */
  public Collection<ITestNGMethod> getExcludedMethods();

  /**
   * Retrieves information about the successful configuration method invocations.
   */
  public IResultMap getPassedConfigurations();

  /**
   * Retrieves information about the skipped configuration method invocations.
   */
  public IResultMap getSkippedConfigurations();

  /**
   * Retrieves information about the failed configuration method invocations.
   */
  public IResultMap getFailedConfigurations();

  /**
   * @return the current XmlTest.
   */
  public XmlTest getCurrentXmlTest();

  public List<Module> getGuiceModules(Class<? extends Module> cls);

  public Injector getInjector(List<Module> moduleInstances);
  Injector getInjector(IClass iClass);
  public void addInjector(List<Module> moduleInstances, Injector injector);
}








猜你喜欢

转载自blog.csdn.net/haiweizhourong/article/details/54980968