利用MyEclipse结合TestNG测试框架进行单元测试

 

by:授客 QQ:1033553122

测试环境

jdk1.8.0_121

myeclipse-10.0-offline-installer-windows.exe

TestNG插件 org.testng.eclipse_6.8.6.20130607_0745

代码组织结构

代码示例

Humman.java存放了需要进行测试的类

package mypackage;

public class Humman {

String name = "";

String sex = "";

String foodForEat = "";

public Humman(String name, String sex){

this.name = name;

this.sex = sex;

}

public void eat(String food){

if(food == ""){

System.out.println("啥都没得吃");

this.foodForEat = "";

}else if(food == "apple"){

System.out.println("在吃苹果");

this.foodForEat = "apple";

}

}

public String getFoodForEat(){

return this.foodForEat;

}

// public static void main(String args[]){

// Humman shouke = new Humman("shouke", "M");

// shouke.eat("apple");

// }

}

HummanTest.java 存放TestNG测试类

代码1:

package unittests;

import mypackage.Humman;

import org.testng.annotations.Test;

import static org.testng.AssertJUnit.*;

public class HummanTest {

@Test

public void testGetFoodForEat() {

Humman shouke = new Humman("shouke", "M");

String FoodForEat = shouke.getFoodForEat();

assertEquals("", FoodForEat);

}

@Test(dependsOnMethods = { "testGetFoodForEat" })

public void testEatWithFoodEqualsApple() {

Humman shouke = new Humman("shouke", "M");

shouke.eat("apple");

String FoodForEat = shouke.getFoodForEat();

assertEquals("apple", FoodForEat);

}

@Test(dependsOnMethods = { "testGetFoodForEat" })

public void testEatWithFoodEmpty() {

Humman shouke = new Humman("shouke", "M");

shouke.eat("");

String FoodForEat = shouke.getFoodForEat();

assertEquals("", FoodForEat);

}

}

代码2:

package unittests;

import mypackage.Humman;

import org.testng.annotations.Test;

import static org.testng.AssertJUnit.*;

public class HummanTest {

Humman shouke;

public HummanTest(){

this.shouke = new Humman("shouke", "M");

}

@Test

public void testGetFoodForEat() {

String FoodForEat = this.shouke.getFoodForEat();

assertEquals("", FoodForEat);

}

@Test(dependsOnMethods = { "testGetFoodForEat" })

public void testEatWithFoodEqualsApple() {

this.shouke.eat("apple");

String FoodForEat = this.shouke.getFoodForEat();

assertEquals("apple", FoodForEat);

}

@Test(dependsOnMethods = { "testGetFoodForEat" })

public void testEatWithFoodEmpty() {

this.shouke.eat("");

String FoodForEat = this.shouke.getFoodForEat();

assertEquals("", FoodForEat);

}

}

运行结果

个人理解

1、撇开对TestNG之类的测试框架进行封装、自行开发框架不谈,如果以类方法、函数为单元的话,个人觉得对单元测试主要就是构造对象(如果有必要的话),对类方法、函数进行传参调用,然后检测结果。

2、单元测试的核心是用例设计,这块网上查找白盒测试用例设计相关资料

3、思考了下,如果基于TestNG进行二次开发,只写一个测试类和一个测试方法,估计有点困难,因为被测试类的构造函数不同,并且每个方法的输入参数和输出结果也都不一样,所以,即便是用反射机制也似乎很不好处理。不过我们可以做些参数化处理,这样还可以减少测试方法的编写

package unittests;

import org.testng.annotations.DataProvider;

import org.testng.annotations.Test;

import static org.testng.AssertJUnit.*;

import mypackage.Humman;

public class HummanTest {

Humman shouke;

public HummanTest(){

this.shouke = new Humman("shouke", "M");

}

@Test

public void testGetFoodForEat() {

String FoodForEat = this.shouke.getFoodForEat();

assertEquals("", FoodForEat);

}

@Test(dependsOnMethods = { "testGetFoodForEat" }, dataProvider = "dataprovider")

public void testEat(Object... args) {

this.shouke.eat((String)args[0]);

String FoodForEat = this.shouke.getFoodForEat();

assertEquals(args[1], FoodForEat);

}

@Test

@DataProvider(name = "dataprovider")

public Object[][] providFood(){

return new Object[][]{

{"", ""},

{"apple", "apple"},

};

}

}

运行结果:

JAVA 利用MyEclipse结合TestNG测试框架进行单元测试的更多相关文章

  1. java利用myeclipse自带三大框架搭建三大框架(Hibernate+Struts2+Spring)过程详解

    搭建过程因人而异,我的搭建过程大致是这样的: 1.创建一个javaweb项目: 2.导入Spring框架,上图: 2.1: 2.2: 2.3: 3.导入struts2框架,上图: 3.1: 3.2: ...

  2. TestNG测试框架在基于Selenium进行的web自动化测试中的应用

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ TestNG+Selenium+Ant TestNG这个测试框架可以很好的和基于Selenium的 ...

  3. TestNg测试框架使用笔记

    Gradle支持TestNG test { useTestNG(){ //指定testng配置文件 suites(file('src/test/resources/testng.xml')) } } ...

  4. JAVA 利用反射自定义数据层框架

    之前的随笔一直都在介绍c#,主要公司最近的业务都是做桌面程序,那么目前c#中的WPF肯定是我做桌面程序的不二之选,做了半年的WPF,也基本摸清了c#写代码的套路和规则(本人之前是两年多的JAVA开发者 ...

  5. java分享第十八天( JAVA利用enum结合testng做数据驱动示例)

    数据驱动是做自动化测试中很重要的一部分,数据源的方案也是百花八门了,比如利用外部文件,直接在@DataProvider中写死等等,我们今天介绍一下利用enum来做数据源,先来看一下enum的写法: p ...

  6. JAVA利用enum结合testng做数据驱动示例

    数据驱动是做自动化测试中很重要的一部分,数据源的方案也是百花八门了,比如利用外部文件,直接在@DataProvider中写死等等,我们今天介绍一下利用enum来做数据源,先来看一下enum的写法: p ...

  7. 利用MyEclipse配置S2SH三大框架篇-Spring配置

    1.配置完Struts2后,然后配置Spring 2.单击“MyEclipse->Project Capabilities->Add Spring Capabilities” 3.选择Sp ...

  8. 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

    1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...

  9. Spring TestContext测试框架搭建

    同样是测试,JUnit和Spring TestContext相比,Spring TestContext优势如下: 1.Spring TestContext可以手动设置测试事务回滚,不破坏数据现场 2. ...

随机推荐

  1. 从github上克隆hibernate项目

    开发的项目用到了hibernate进行对象的持久化,最近项目上不忙,打算通过官方文档和源码来进行深度学习.第一步将hibernate部署到本地就折腾了好久,打算记录一下. 关于github的注册说一句 ...

  2. Web存储及文件拖拽

    存储 实现内容的永久保存(localStorage) 保存: localStorage.自定义键名="123"; 获取: //判断是否有内容 if(localStorage.自定义 ...

  3. CentOS 7配置MariaDB允许指定IP远程连接数据库

    防火墙 CentOS7 之前的防火墙是不一样的,比如你要添加3306端口: ## 全部 iptables -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT # ...

  4. golang写业务代码,用全局函数还是成员函数

    在golang中,函数划分为全局函数和成员函数,在使用的时候,有种情况,会产生一些疑惑的,就是在写业务代码的时候,使用全局函数好像会比较方便,一般业务代码,都不会复用,都是针对特定的业务进行编程,要复 ...

  5. 【原创】Hacker学习发展流程图 V1.0

    这两张Hacker学习发展流程图都来自A1PASS之手,V0.2为2009推出的,V1.0为2015推出,在这里保存这两张图作为自己学习的方向,希望自己有朝一日也能成为IT大牛!!!

  6. ES6躬行记(10)——正则表达式

    在ES5中,如果使用构造函数RegExp()初始化RegExp对象(即正则表达式),并且它的第一个参数是正则表达式时,那么不允许再传入标志字符串(即第二个参数).而ES6更改了这项限制,如果传入了第二 ...

  7. MyBatis源码解析(九)——Type类型模块之类型处理器注册器(TypeHandlerRegistry)

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6709157.html 1.回顾 上一篇研究的是类型别名注册器TypeAliasRegist ...

  8. MySQL EXPLAIN 命令: 查看查询执行计划

    MySQL 的 EXPLAIN 命令可以查看SELECT语句的执行的计划,是 MySQL 查询优化的必备工具. 通过执行计划可以了解查询方式.索引使用情况.需要扫描的数据量以及是否需要临时表或排序操作 ...

  9. SHELL脚本--多命令逻辑执行顺序

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html Linux中可以使用分号“;”.双and号“&& ...

  10. ARM 处理器寻址方式之间接寻址的几种表达

    我们以 LDR 指令为例来分别举例分析. LDR 指令的格式为: LDR{条件} 目的寄存器,<存储器地址> LDR 指令是字加载指令,用于从存储器中将一个 32 位的字数据送到目的寄存器 ...