结对单元测试(随机运行四则运算)
单元测试:
由于这次换了一个结对伙伴,我们做的单元测试和黑白盒是我小伙伴的四则运算源代码,我负责进行单元测试和白盒,小伙伴负责黑盒。
结对伙伴 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,可以将随机数强制转换为浮点型。
做单元测试中,发现两个运算符的这部分算法有问题,但是不知道怎么去改,也不知道看哪里提示问题在哪里,感觉很茫然,无从下手。
黑白盒的测试中,我负责的是白盒测试,但是觉得对这个黑白盒其实不是特别了解,老师上课讲了一下也没有听懂,做作业的时间比较短,我个人觉得白盒子就是对算法源代码的流程分析,黑盒子就是程序的改进结果。

浙公网安备 33010602011771号