实验报告 纪欣

一、题目简介

   一元一次方程求解

二、源码的github链接

  https://github.com/jixin1995/ceshi1/blob/master/text

  https://github.com/jixin1995/ceshi1/blob/master/text1

三、所设计的模块测试用例、测试结果截图

(1)被测试的类
package junittest;
public class MyMath
{

public double oneEquation(double a,double b)
{
  //如果a=0,则防范无法求解
  if(a==0)
  {
   System.out.println("参数错误");
   throw new ArithmeticException("参数错误");
  }
  else
  {
   System.out.println("一元一次方程有解");
   return -b/a;
  }
}

public double[] twoEquation(double a,double b,double c)
{
  double[] result;
  if(a==0)
  {
   System.out.println("****************************");  
   throw new ArithmeticException("参数错误");
  }
  //有理数范围内无根
  else if(b*b-4*a*c<0)
  {
   System.out.println("****************************");  
   throw new ArithmeticException("方程在理数范围内无解");
  }
  //方程有唯一的解
  else if(b*b-4*a*c==0)
  {
   System.out.println("****************************");  
   System.out.println("方程存在唯一的解");
   result=new double[1];
   result[0]=-b/(2*a);
   return result;
  }
  //方程有两个根
  else
  {
   System.out.println("****************************");
   System.out.println("方程存在两个解");
   result=new double[2];
   //使用数组返回方程的两个根
   result[0]=(-b+Math.sqrt(b*b-4*a*c))/2/a;
   result[1]=(-b-Math.sqrt(b*b-4*a*c))/2/a;
   return result;
  }
}
}
(2)测试类
package junittest;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.JUnitCore;
public class MyMathTest
{
//将需要测试的类,声明成成员变量
MyMath math;
//每次运行测试方法之前都会运行该方法
@Before
public void setUp()
{
  math=new MyMath();
}
//每次运行测试用例之后都会运行该方法
@After
public void tearDown()
{
  math=null;
}

//测试一元一次方程的求解
//expected=ArithmeticException.class
//相当于断言该测试方法将会抛出ArithmeticException异常
@Test(expected=ArithmeticException.class)
public void testOneEquation()
{
  System.out.println("=================================");  
  System.out.println("=================================");
        System.out.println("测试一元一次方程求解");
  //断言该方程求解应该为-1.8
  assertEquals(math.oneEquation(5,9),-1.8,.00001);
  //断言当a==0时的情况
  assertEquals(math.oneEquation(0,3),-1);
}
//测试一元二次方程的求解
@Test
public void testTwoEquation()
{
  System.out.println("=================================");  
  System.out.println("=================================");
        System.out.println("测试一元二次方程求解");  
  double[] tmp=math.twoEquation(1,-3,2);
  //断言方程的两个解,一个为2,一个为3
  assertEquals("第一个解出错",tmp[0],2,.00001);
  assertEquals("第二个解出错",tmp[1],3,.00001);
}
//程序的入口,直接运行该测试用例
public static void main(String[] args)
{
  //运行单个的测试用例
  JUnitCore.main("junittest.MyMathTest");
}
}
(3)测试效果图
说说JUnit4下的单元测试用例的使用

package junittest;
public class MyMath
{

public double oneEquation(double a,double b)
{
  //如果a=0,则防范无法求解
  if(a==0)
  {
   System.out.println("参数错误");
   throw new ArithmeticException("参数错误");
  }
  else
  {
   System.out.println("一元一次方程有解");
   return -b/a;
  }
}

public double[] twoEquation(double a,double b,double c)
{
  double[] result;
  if(a==0)
  {
   System.out.println("****************************");  
   throw new ArithmeticException("参数错误");
  }
  //有理数范围内无根
  else if(b*b-4*a*c<0)
  {
   System.out.println("****************************");  
   throw new ArithmeticException("方程在理数范围内无解");
  }
  //方程有唯一的解
  else if(b*b-4*a*c==0)
  {
   System.out.println("****************************");  
   System.out.println("方程存在唯一的解");
   result=new double[1];
   result[0]=-b/(2*a);
   return result;
  }
  //方程有两个根
  else
  {
   System.out.println("****************************");
   System.out.println("方程存在两个解");
   result=new double[2];
   //使用数组返回方程的两个根
   result[0]=(-b+Math.sqrt(b*b-4*a*c))/2/a;
   result[1]=(-b-Math.sqrt(b*b-4*a*c))/2/a;
   return result;
  }
}
}

package junittest;
public class HelloWorld {
//方法简单的返回字符串
public String sayHello()
{
  System.out.println("HelloWorld");
  return "Hello world";
}

//计算两个整数的和
public int add(int a,int b)
{  
  System.out.println("a+b="+(a+b));
  return a+b;
}
}

(2)测试用例类
package junittest;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.JUnitCore;
public class MyMathTest
{
//将需要测试的类,声明成成员变量
MyMath math;
//每次运行测试方法之前都会运行该方法
@Before
public void setUp()
{
  math=new MyMath();
}
//每次运行测试用例之后都会运行该方法
@After
public void tearDown()
{
  math=null;
}

//测试一元一次方程的求解
//expected=ArithmeticException.class
//相当于断言该测试方法将会抛出ArithmeticException异常
@Test(expected=ArithmeticException.class)
public void testOneEquation()
{
  System.out.println("=================================");  
  System.out.println("=================================");
        System.out.println("测试一元一次方程求解");
  //断言该方程求解应该为-1.8
  assertEquals(math.oneEquation(5,9),-1.8,.00001);
  //断言当a==0时的情况
  assertEquals(math.oneEquation(0,3),-1);
}
//测试一元二次方程的求解
@Test
public void testTwoEquation()
{
  System.out.println("=================================");  
  System.out.println("=================================");
        System.out.println("测试一元二次方程求解");  
  double[] tmp=math.twoEquation(1,-3,2);
  //断言方程的两个解,一个为2,一个为3
  assertEquals("第一个解出错",tmp[0],2,.00001);
  assertEquals("第二个解出错",tmp[1],3,.00001);
}
}

package junittest;
import static org.junit.Assert.*;
import org.junit.Test;
public class HelloWorldTest {
@Test
public void testSayHello()
{
  System.out.println("");
  HelloWorld hello=new HelloWorld();
  assertEquals("sayHello方法出错",hello.sayHello(),"Hello world");
}

@Test
public void testAdd()
{
  HelloWorld hello=new HelloWorld();
  assertEquals(hello.add(1, 2),3);
}
}

(3) 测试类
package junittest;
import org.junit.runner.JUnitCore;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
junittest.MyMathTest.class,
junittest.HelloWorldTest.class
})

public class AllTests {
public static void main(String[] args)
{
  JUnitCore.main("junittest.AllTests");
}
}


@RunWith(Suite.class)
@Suite.SuiteClasses({
junittest.MyMathTest.class,
junittest.HelloWorldTest.class

})

(4) 测试结果效果图
说说JUnit4下的单元测试用例的使用

四、心得体会

     测试通过了,CalculatorTest2类里的parameter是每次的测试输入,result就是测试的结果。所有的测试输入和期望结果都在@Parameters标注的data函数的返回的Collection集合里,2的期望得到的平方结果值是4,0期望得到0,-3期望得到9。

       把测试代码提交给JUnit框架后,框架如何来运行代码呢?答案就是——Runner。在JUnit中有很多个 Runner,他们负责调用测试代码,每一个Runner都有各自的特殊功能,要根据需要选择不同的Runner来运行测试代码。JUnit中有一个默认Runner,如果没有指定,那么系统自动使用默认 Runner来运行你的代码。这里参数化测试就没有再用默认的Runner了。

       我从中学到了好多,但其中还有好多不足,还需要好好的改进。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

https://github.com/jixin1995/ceshi1/blob/master/text

posted @ 2015-04-29 22:59  紫色薰衣草jx  阅读(158)  评论(3编辑  收藏  举报