热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用MyEclipse和TestNG测试框架在Java中高效进行单元测试

通过MyEclipse集成TestNG测试框架,可以在Java开发中高效地进行单元测试。本文介绍了在JDK1.8.0_121和MyEclipse10.0离线环境下配置和使用TestNG的具体步骤,帮助开发者提高测试效率和代码质量。

利用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);

}

}

 

 

 

运行结果

JAVA <wbr>利用MyEclipse结合TestNG测试框架进行单元测试

 

 

 

 

 

个人理解

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

 

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

 

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

 

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 &#61; new Humman("shouke", "M");

}

 

&#64;Test

public void testGetFoodForEat() {

String FoodForEat &#61; this.shouke.getFoodForEat();

assertEquals("", FoodForEat);

}

 

&#64;Test(dependsOnMethods &#61; { "testGetFoodForEat" }, dataProvider &#61; "dataprovider")

public void testEat(Object... args) {

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

String FoodForEat &#61; this.shouke.getFoodForEat();

assertEquals(args[1], FoodForEat);

}

 

&#64;Test

&#64;DataProvider(name &#61; "dataprovider")

public Object[][] providFood(){

return new Object[][]{

{"", ""},

{"apple", "apple"},

};

}

 

}

 

运行结果&#xff1a;

JAVA <wbr>利用MyEclipse结合TestNG测试框架进行单元测试

 

 

 

转:https://www.cnblogs.com/shouke/p/10157587.html



推荐阅读
  • 手把手教你构建简易JSON解析器
    本文将带你深入了解JSON解析器的构建过程,通过实践掌握JSON解析的基本原理。适合所有对数据解析感兴趣的开发者。 ... [详细]
  • 本文深入探讨了Java注解的基本概念及其在现代Java开发中的应用。文章不仅介绍了如何创建和使用自定义注解,还详细讲解了如何利用反射机制解析注解,以及Java内建注解的使用场景。 ... [详细]
  • 本文详细介绍了如何在Android游戏中实现360°平滑触屏摇杆,包括摇杆的基本设计原理和具体实现步骤。 ... [详细]
  • 本文通过一个具体的用户管理项目,详细介绍如何使用Spring MVC框架进行开发。从用户实体类的设计到控制器的实现,再到视图层的展示,全面解析Spring MVC的核心功能与实现细节。 ... [详细]
  • 本文介绍了Windows驱动开发的基础知识,包括WDF(Windows Driver Framework)和WDK(Windows Driver Kit)的概念及其重要特性,旨在帮助开发者更好地理解和利用这些工具来简化驱动开发过程。 ... [详细]
  • 本文详细介绍了Android平台上的动态加载技术,包括其定义、分类及具体实现步骤。通过动态加载技术,开发者可以在不更新应用的情况下,向用户推送新的功能或修复bug,从而提升用户体验。 ... [详细]
  • 本文详细探讨了Java中多线程的概念,包括并行与并发的区别,并通过具体实例展示了如何在Java中实现多线程操作,如通过继承Thread类、实现Runnable接口和使用Callable接口等方法。 ... [详细]
  • 本文探讨了在Java应用中实现线程池优雅关闭的两种方法,包括使用ShutdownHook注册钩子函数以及通过SignalHandler处理信号量。每种方法都提供了具体的代码示例,并讨论了可能遇到的问题及解决方案。 ... [详细]
  • 快速排序是一种高效的排序算法,以其在多数情况下接近最优的性能而著称。本文将详细介绍如何在 Java 中实现快速排序,并分析其工作原理。 ... [详细]
  • Java WebSocket 实时通信服务端实现
    本文介绍了一个基于Java的WebSocket实时通信服务端代码示例,包括客户端连接管理、消息接收与分发等功能。 ... [详细]
  • 导读上一篇讲了zsh的常用字符串操作,这篇开始讲更为琐碎的转义字符和格式化输出相关内容。包括转义字符、引号、print、printf的使用等等。其中很多内容没有必要记忆,作为手册参 ... [详细]
  • 快速排序是基于分治策略的一种排序算法,其平均时间复杂度为O(n log n),在大多数情况下表现优于其他排序算法。本文将详细介绍快速排序的工作原理,并提供一个Java语言的具体实现。 ... [详细]
  • Iris 开发环境配置指南 (最新 Go & IntelliJ IDEA & Iris V12)
    本指南详细介绍了如何在最新的 Go 语言环境及 IntelliJ IDEA 中配置 Iris V12 框架,适合初学者和有经验的开发者。文章提供了详细的步骤说明和示例代码,帮助读者快速搭建开发环境。 ... [详细]
  • InnoSetup打包的软件需要在安装和卸载时检查程序是否在运行,不然会安装失败或者卸载不完全,网上搜了一下,有几种方法: ... [详细]
  • 本文档提供了几个经典的Java编程示例,包括多线程处理、基本程序结构以及简单的逻辑运算,旨在帮助初学者更好地理解和掌握Java语言的核心特性。 ... [详细]
author-avatar
9asd8fy
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有