赞
踩
实验名称:软件测试之单元测试
所使用的工具软件及环境:
硬件环境: 微机1台。
软件环境: 操作系统:Windows;建模工具:Visio或Rose;测试工具Junit;数据库:MySQL(可选);开发工具包:JDK(可选);开发环境:Eclipse(可选);Web服务器:Tomcat(可选);浏览器:IE(可选)。
对JAVA单元测试有初步的了解,学会使用Junit编写自己的测试用例,并对被测试类进行测试。
实验采用Eclipse
选中Libraries标签,点击“add Library”添加必要的Junit类库。
选择Junit3,点击Finish,完成类库的添加,如图所示
点击Finish,完成UnitTest项目的设置,进入项目工作界面。
在UnitTest上右键,——>New——>Class,弹出添加类窗口。Package中填写cn.edu.zstu,Name中填写Book。(注意大小写)
在Book类中填充内容如下,完成Book类的编写。
右键点击UnitTest项目,—>New—>Other,选择Java下的JUnit下的JUnit Test Case,点击Next:
在Package中填写“cn.edu.zstu”,在Name中填写“BookTest”,在Class under test中填写“cn.edu.zstu”(注意大小写),选中setUp(),teardown()和constructor()三个复选框,点击Next;在弹出的窗口中选中equals成员函数,所完成的BookTest类如图所示。
为BookTest添加两个私有成员变量
private Book book1;
private Book book2;
分别完成setUp()和tearDown()两个成员函数
编写测试用例函数testEqualsObject(),使用下列两条语句替换fail(“Not yet implemented”);
asserFalse(book2.equals(book1));
asserTrus(book1.equals(book1));
点击Run As JUit Test,观察测试运行结果。
自行验证:
- package cn.edu.zstu;
-
- public class Book {
- private String title;
- private double price;
- public Book(String title,double price){
- this.title=title;
- this.price=price;
- }
-
- public boolean equals(Object object){
- if (object instanceof Book){
- Book book=(Book)object;
- return getTitle().equals(book.getTitle()) && getPrice()==book.getPrice();
- }
- return false;
- }
-
- public double getPrice(){
- return price;
- }
-
- public String getTitle(){
- return title;
- }
-
- public void setTitle(String title){
- this.title=title;
- }
- }
-
- package cn.edu.zstu;
-
- import junit.framework.TestCase;
-
- public class BookTest extends TestCase {
- private Book book1;
- private Book book2;
- public BookTest(String name) {
- super(name);
- }
-
- protected void setUp() throws Exception {
- super.setUp();
- book1 = new Book("ES",13.88);
- book2 = new Book("The ES54",11.99);
- }
-
- protected void tearDown() throws Exception {
- super.tearDown();
- book1 = null;
- book2 = null;
- }
- public void testEqualsObject(){
- // fail("Not yet implemented");
- assertFalse(book2.equals(book1));
- assertFalse(book1.equals(book2));
- }
- }
修改BookTest类中的测试用例函数testEqualsObject(),将
assertFalse(book1.equals(book2));
修改为assertFalse(book2.equals(book2));
点击Run As JUit Test,运行结果如下图所示,测试提示错误。
首先定义一个Triangle类表示三角形,并定义三个double型变量a、b、c分别表示三角形的三条边长。其后,为该类定义带三个参数的构造方法,通过传递a、b、c三个参数创建三角形对象。
接下来,分析三角形的类型情况:
针对上述内容,在Triangle类中编写what_triangle()函数,用以判断三角形类型。其算法流程图如下图所示:
- package cn.edu.zstu;
-
- public class Triangle {
- private double a;
- private double b;
- private double c;
- public Triangle(double a,double b,double c){
- this.a=a;
- this.b=b;
- this.c=c;
- }
-
- public int what_triangle(){
- if((a+b<=c||a+c<=b||b+c<=a)||(a<=0)||(b<=0)||(c<=0)){
- System.out.println(a+" "+b+" "+c+" 不能构成三角形!");
- return 0;
- }
- else {
- if (a==b && b==c){
- System.out.println(a+" "+b+" "+c+" 构成等边三角形!");
- return 5;
- } else if ((a==b||a==c||b==c) && (Math.abs(a*a+b*b-c*c)<=0.000001||Math.abs(a*a+c*c-b*b)<=0.000001||Math.abs(b*b+c*c-a*a)<=0.000001)){
- System.out.println(a+" "+b+" "+c+" 构成等腰直角三角形!");
- return 4;
- }else if (a==b||a==c||b==c) {
- System.out.println(a+" "+b+" "+c+" 构成等腰三角形!");
- return 3;
- } else if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a)){
- System.out.println(a+" "+b+" "+c+" 构成直角三角形!");
- return 2;
- }
- else {
- System.out.println(a+" "+b+" "+c+" 构成普通三角形!");
- return 1;
- }
- }
- }
- }
接下来仿照三中方法创建Junit测试用例,为了测试三角形类的所有类型,设计测试案例如下:
表1 Triangle测试用例
序号 | a | b | c | 三角形类型 | 对应类型编号 |
t1 | 1 | 2 | 3 | 不能构成三角形 | 0 |
t2 | 1 | 2 | 5 | 不能构成三角形 | 0 |
t3 | 3 | 3 | 3 | 等边三角形 | 5 |
t4 | 3 | 2 | 3 | 等腰三角形 | 3 |
t5 | 4 | 4 | 4√2 | 等腰直角三角形 | 4 |
t6 | 3 | 4 | 5 | 直角三角形 | 2 |
t7 | 0 | 3 | 3 | 不构成三角形 | 0 |
t8 | 7 | 6 | 3 | 普通三角形 | 1 |
t9 | -1 | 9 | 3 | 不构成三角形 | 0 |
由此,为TriangleTest添加9个Triangle私有成员对象t1-t9,并在setUp()中完成它们的初始化,数据与上表一致。其后,编写测试用例函数testEqual(),使用:
assertEquals(类型编号,t序号.what_triangle());
测试各案例是否均符合实际,验证判断三角形类型函数的实现。
- package cn.edu.zstu;
-
- import junit.framework.TestCase;
-
- public class TriangleTest extends TestCase {
- private Triangle t1;
- private Triangle t2;
- private Triangle t3;
- private Triangle t4;
- private Triangle t5;
- private Triangle t6;
- private Triangle t7;
- private Triangle t8;
- private Triangle t9;
-
- public TriangleTest(String name) {
- super(name);
- }
-
- protected void setUp() throws Exception {
- super.setUp();
- t1=new Triangle(1,2,3);
- t2=new Triangle(1,2,5);
- t3=new Triangle(3,3,3);
- t4=new Triangle(3,2,3);
- t5=new Triangle(4,4,4*Math.sqrt(2));
- t6=new Triangle(3,4,5);
- t7=new Triangle(0,3,3);
- t8=new Triangle(7,6,3);
- t9=new Triangle(-1,9,3);
- }
-
- protected void tearDown() throws Exception {
- super.tearDown();
- }
-
- public void testEquals() {
- //fail("Not yet implemented");
- assertEquals(0,t1.what_triangle());
- assertEquals(0,t2.what_triangle());
- assertEquals(5,t3.what_triangle());
- assertEquals(3,t4.what_triangle());
- assertEquals(4,t5.what_triangle());
- assertEquals(2,t6.what_triangle());
- assertEquals(0,t7.what_triangle());
- assertEquals(1,t8.what_triangle());
- assertEquals(0,t9.what_triangle());
- }
- }
先用各案例正确的三角形类型编号对各案例进行测试,运行结果如下图所示。
修改TriangleTest类中的测试用例函数testEquals(),将assertEquals(0, t1.what_triangle()); 修改为assertEquals(1, t1.what_triangle()); 即将不能构成三角形的案例指认为普通三角形。
点击Run As JUit Test,运行结果如下图所示,测试运行至该句发现错误进行提示,并不继续测试下去。
修改TriangleTest类中的测试用例函数testEquals(),将assertEquals(5, t3.what_triangle()); 修改为assertEquals(3, t3.what_triangle()); 即将等边三角形的案例指认为等腰三角形。
点击Run As JUit Test,运行结果如下图所示,测试运行至该句发现错误进行提示,并不继续测试下去。
修改TriangleTest类中的测试用例函数testEquals(),将assertEquals(3, t4.what_triangle()); 修改为assertEquals(2, t4.what_triangle()); 即将等腰三角形的案例指认为直角三角形。
点击Run As JUit Test,运行结果如下图所示,测试运行至该句发现错误进行提示,并不继续测试下去。
修改TriangleTest类中的测试用例函数testEquals(),将assertEquals(4, t5.what_triangle()); 修改为assertEquals(3, t5.what_triangle()); 即将等腰直角三角形的案例指认为等腰三角形。
点击Run As JUit Test,运行结果如下图所示,测试运行至该句发现错误进行提示,并不继续测试下去。
在上述案例测试修改中已进行测试,不再赘述。
在上述案例测试修改中已进行测试,不再赘述。
总结:通过JUnit测试,验证本程序可以正确判断三角形的所有类型。
本次实验,主要是对JAVA单元测试的初步了解。
根据指导书中的Book类测试案例,学习在Eclipse中添加JUnit库作为测试环境对编写代码进行测试。在针对需求分析,编写完类对象和内部函数的基础上进行测试。首先设计测试案例,可以按照划分等价类、建立等价类表、组合等价类的顺序设计测试用例。然后利用项目下的JUnit的JUnit Test Case创建Test类,并结合类定义编写测试用例。测试用例基于使用类函数并返回测试结果。若返回结果正确,则表明测试用例无误且类函数无误;若测试用例返回结果错误,则在失败溯源处显示错误所在行,可观察改正对应行或类函数错误后重试。而后,在Triangle类的测试案例中进行实践。
通过本次实验,我进一步学习了软件测试的方法,了解了更为细致的测试过程,有益于日后自己编程开发软件的测试。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。