结对单元测试(随机运行四则运算)
单元测试:
由于这次换了一个结对伙伴,我们做的单元测试和黑白盒是我小伙伴的四则运算源代码,我负责进行单元测试和白盒,小伙伴负责黑盒。
结对伙伴 54江丹仪,博客地址:http://www.cnblogs.com/JDY64/
在进行单元测试的过程中,我将源代码主要算法中的分为三种方法封装在Core类中:
import java.util.Scanner; public class Core { int a,b,c,d,h; char fh2,fh3,fh4; char[]fh={'+','-','*','/'}; Scanner in=new Scanner(System.in); int ranswer,answer;//正确答案和用户输入答案 int num,fhnum;//出题数和符号数 public void Fhum1 (int a,int b,char fh2) { if(fh2=='+'){ ranswer=a+b; } if(fh2=='-'){ ranswer=a-b; } if(fh2=='*'){ ranswer=a*b; } if(fh2=='/'){ ranswer=a/b; } } public void Fhum2 (int a,int b,int c,char fh2,char fh3){ if(fh2=='+') { if(fh3=='+') { ranswer=a+b+c; } if(fh3=='-') { ranswer=a+b-c; } if(fh3=='*') { ranswer=a+b*c; } if(fh3=='/') { ranswer=a+b/c; } if(fh2=='-') { if(fh3=='+'){ ranswer=a-b+c; } if(fh3=='-'){ ranswer=a-b-c; } if(fh3=='*'){ ranswer=a-b*c; } if(fh3=='/'){ ranswer=a-b/c; } } if(fh2=='*') { if(fh3=='+'){ ranswer=a*b+c; } if(fh3=='-'){ ranswer=a*b-c; } if(fh3=='*'){ ranswer=a*b*c; } if(fh3=='/'){ ranswer=a*b/c; } } if(fh2=='/') { if(fh3=='+'){ ranswer=a/b+c; } if(fh3=='-'){ ranswer=a/b-c; } if(fh3=='*'){ ranswer=a/b*c; } if(fh3=='/'){ ranswer=a-b/c; } } } } public void Fhum3 (int a,int b,int c,int d,char fh2,char fh3,char fh4){ if(fh2=='+')//第一为加 { if(fh3=='+') { if(fh4=='+') {ranswer=a+b+c+d;} if(fh4=='-') {ranswer=a+b+c-d;} if(fh4=='*') {ranswer=a+b+c*d;} if(fh4=='/') {ranswer=a+b+c/d;} } if(fh3=='-') { if(fh4=='+') {ranswer=a+b-c+d;} if(fh4=='-') {ranswer=a+b-c-d;} if(fh4=='*') {ranswer=a+b-c*d;} if(fh4=='/') {ranswer=a+b-c/d;} } if(fh3=='*') { if(fh4=='+') {ranswer=a+b*c+d;} if(fh4=='-') {ranswer=a+b*c-d;} if(fh4=='*') {ranswer=a+b*c*d;} if(fh4=='/') {ranswer=a+b*c/d;} } if(fh3=='/') { if(fh4=='+') {ranswer=a+b/c+d;} if(fh4=='-') {ranswer=a+b/c-d;} if(fh4=='*') {ranswer=a+b/c*d;} if(fh4=='/') {ranswer=a+b/c/d;} } } if(fh2=='-')//第一为减 { if(fh3=='+') { if(fh4=='+') {ranswer=a-b+c+d;} if(fh4=='-') {ranswer=a-b+c-d;} if(fh4=='*') {ranswer=a-b+c*d;} if(fh4=='/') {ranswer=a-b+c/d;} } if(fh3=='-') { if(fh4=='+') {ranswer=a-b-c+d;} if(fh4=='-') {ranswer=a-b-c-d;} if(fh4=='*') {ranswer=a-b-c*d;} if(fh4=='/') {ranswer=a-b-c/d;} } if(fh3=='*') { if(fh4=='+') {ranswer=a-b*c+d;} if(fh4=='-') {ranswer=a-b*c-d;} if(fh4=='*') {ranswer=a-b*c*d;} if(fh4=='/') {ranswer=a-b*c/d;} } if(fh3=='/') { if(fh4=='+') {ranswer=a-b/c+d;} if(fh4=='-') {ranswer=a-b/c-d;} if(fh4=='*') {ranswer=a-b/c*d;} if(fh4=='/') {ranswer=a-b/c/d;} } } if(fh2=='*')//第一为乘 { if(fh3=='+') { if(fh4=='+') {ranswer=a*b+c+d;} if(fh4=='-') {ranswer=a*b+c-d;} if(fh4=='*') {ranswer=a*b+c*d;} if(fh4=='/') {ranswer=a*b+c/d;} } if(fh3=='-') { if(fh4=='+') {ranswer=a*b-c+d;} if(fh4=='-') {ranswer=a*b-c-d;} if(fh4=='*') {ranswer=a*b-c*d;} if(fh4=='/') {ranswer=a*b-c/d;} } if(fh3=='*') { if(fh4=='+') {ranswer=a*b*c+d;} if(fh4=='-') {ranswer=a*b*c-d;} if(fh4=='*') {ranswer=a*b*c*d;} if(fh4=='/') {ranswer=a*b*c/d;} } if(fh3=='/') { if(fh4=='+') {ranswer=a*b/c+d;} if(fh4=='-') {ranswer=a*b/c-d;} if(fh4=='*') {ranswer=a*b/c*d;} if(fh4=='/') {ranswer=a*b/c/d;} } } } public int getResult(){ return ranswer; } }
第二步:将JUnit4单元测试包引入这个项目中
第三步,生成JUnit测试框架,之后系统会自动生成一个新类CoreTest,再根据情况完善CoreTest类里面的代码,完整的CoreTest代码如下:
import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; public class CoreTest { private static Core core=new Core(); @Before public void setUp() throws Exception { } @Test public void testFhum1() { core.Fhum1(3, 5, '+'); assertEquals(8,core.getResult()); fail("尚未实现"); } @Test public void testFhum2() { core.Fhum2(3, 5, 2, '*', '+'); assertEquals(17,core.getResult()); fail("尚未实现"); } @Test public void testFhum3() { core.Fhum3(5, 3, 2, 4, '+','-' , '+'); assertEquals(10,core.getResult()); fail("尚未实现"); } }
最后,进行测试,结果如下:
白盒测试:
实验总结:
在一开始拿到的是自己完全不熟悉的代码,要先把小伙伴的代码看熟悉, 觉得代码比较混乱,不知道怎么去改比较好,运行中发现了几个可以改进的地方如下:
1.一开始运行的时候,弹出的框里面什么东西都没有,需要先最小化再放大才可以看到界面提示。
2.选择题目数大于5题的时候会自动退出程序,个人觉得可以先给个提示或者删除此功能。
3.做完一道题时按确定要重新按开始答题才可以再次答题,答完题目后直接就退出框,一开始不熟悉程序的时候感觉不知道按哪里。
4.代码缺少对分数的考虑,如5/3答案直接为1,可以将随机数强制转换为浮点型。
做单元测试中,发现两个运算符的这部分算法有问题,但是不知道怎么去改,也不知道看哪里提示问题在哪里,感觉很茫然,无从下手。
黑白盒的测试中,我负责的是白盒测试,但是觉得对这个黑白盒其实不是特别了解,老师上课讲了一下也没有听懂,做作业的时间比较短,我个人觉得白盒子就是对算法源代码的流程分析,黑盒子就是程序的改进结果。