DDT(数据驱动测试)

当你测试一个方法时,它的分支很多,要不又很多if else 或者 switch 等等,在这种情况下,要想写个case将其覆盖,需要写很多test,这些test基本内容都是一样的,唯一的不一样就是参数和期望参数,这时很麻烦,虽然可以vc大法,但是测试数据看起来也并不是一目了然,那么我今天就把我刚学到得DDT(Data Driver Test)注意,不是TDD(Test Drivern Develop)测试记录一下,声明,我是菜鸟,很菜。

下面是所要用到得bean:

 

package ddttest;

import java.util.List;

public class Person {
	private  String name;
	private  int  age;
	private  double salary;
        //有点递归的感觉
	private List<Person> friends;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public double getSalary() {
		return salary;
	}
	public void setSalary(double salary) {
		this.salary = salary;
	}
	public List<Person> getFriends() {
		return friends;
	}
	public void setFriends(List<Person> friends) {
		this.friends = friends;
	}
	
	
}

 下面这个是要测试的类

package ddttest;

public class XMLParameterizedAdvanced {
	
	public String comparePerson(Person person)
	{
		if(person.getSalary() > 8000 && (person.getAge() < 30))
		{
			return "Good";
		}else if(person.getSalary() > 20000 && !(person.getFriends().isEmpty()))
		{
			return "Nice";
		}else {
			return "Normal";
		}
	}
}

  下面是测试类,为了方便我直接就在ddttest下生成了:

 
package ddttest;

import static org.junit.Assert.assertEquals;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junitext.XMLParameters;
import org.junitext.runners.XMLParameterizedRunner;

@RunWith(XMLParameterizedRunner.class)
public class XMLParameterizedAdvancedTest {
	private Person expectedPerson;
	private String actualReturn;
	
	@XMLParameters("/ddttest/test.xml")
	public XMLParameterizedAdvancedTest(Person expectedPerson, String actualReturn){
		this.expectedPerson = expectedPerson;
		this.actualReturn = actualReturn;
	} 
	@Test
	public void testComparePerson() {
		XMLParameterizedAdvanced test = new XMLParameterizedAdvanced();
		assertEquals(actualReturn,test.comparePerson(expectedPerson));
	}

}
 

   最后是测试数据的XML文件:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<tests>
	<test>
		<bean id= "expectedPerson" class="ddttest.Person">
			<property name = "name" value = "ChenHong"/>
			<property name = "age" value = "27"/>
			<property name = "salary" value = "9000"/>
			<property name = "friends" />
		</bean>
			<string id = "actualReturn" value ="Good"/>
	</test>

	<test>
		<bean id= "expectedPerson" class="ddttest.Person">
			<property name = "name" value = "Lin dan"/>
			<property name = "age" value = "30"/>
			<property name = "salary" value = "25000"/>
			<property name = "friends">
		  <list>
			<bean class="ddttest.Person">
				<property name = "name" value = "Leecongwei"/>
				<property name = "age" value = "40"/>
				<property name = "salary" value = "5000"/>
				<property name = "friends" />
			</bean>
			<bean class="ddttest.Person">
				<property name = "name" value = "Jonason"/>
				<property name = "age" value = "40"/>
				<property name = "salary" value = "5000"/>
				<property name = "friends" />
			</bean>
		  </list>
		  </property>
		</bean>
			<string id = "actualReturn" value ="Nice"/>
	</test>
 
	<test>
		<bean id= "expectedPerson" class="ddttest.Person">
			<property name = "name" value = "Gade"/>
			<property name = "age" value = "27"/>
			<property name = "salary" value = "5000"/>
			<property name = "friends" />
		</bean>
			<string id = "actualReturn" value ="Normal"/>
	</test>  
</tests>

 再导入相应的jar包,就可以跑了,如果安装了,emma插件的,会发现覆盖率是百分之百。

注意:在编写测试数据的时候,指定class时,务必小心,不要将空格加入,这样会报

java.lang.ClassNotFoundException。。。

如果报了,那么一定是测试数据的XML没有正确,可以采用排除法,一点一点的定位出错误所在地点。

附件是一些jar包,其中jmockit.jar 是不用加的,加进去了可能会有问题。

还有,junit的src包也不要加,如果加了会出现异常。总之,自己多导两次包就应该可以找出问题了。

具体原因可能是junit的src包和junit的jar同时存在时,会有冲突。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值