结对单元测试(随机运行四则运算)

单元测试:

由于这次换了一个结对伙伴,我们做的单元测试和黑白盒是我小伙伴的四则运算源代码,我负责进行单元测试和白盒,小伙伴负责黑盒。

结对伙伴 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,可以将随机数强制转换为浮点型。

   做单元测试中,发现两个运算符的这部分算法有问题,但是不知道怎么去改,也不知道看哪里提示问题在哪里,感觉很茫然,无从下手。

  黑白盒的测试中,我负责的是白盒测试,但是觉得对这个黑白盒其实不是特别了解,老师上课讲了一下也没有听懂,做作业的时间比较短,我个人觉得白盒子就是对算法源代码的流程分析,黑盒子就是程序的改进结果。

     

原文地址:https://www.cnblogs.com/leewanmei/p/4469591.html