对于测试类中方法的要求:
  在JUnit 3.8中,测试方法需要满足如下原则:
  1.public的。
  2.void的。
  3.无方法参数。
  4.方法名称必须以test开头。 (它通过反射找出所有方法,然后找出以test开头的方法)。
  Test Case之间一定要保持完全的独立性,不允许出现任何的依赖关系。
  删除一些方法后不会对其他的方法产生任何的影响。
  我们不能依赖于测试方法的执行顺序。
  综上,编写代码如下:
package com.mengdd.junit;
import junit.framework.Assert;
import junit.framework.TestCase;
public class CalculatorTest extends TestCase
{
public void testAdd()
{
Calculator calculator = new Calculator();
int result = calculator.add(1, 2);
// 判断方法的返回结果
Assert.assertEquals(3, result);// 第一个参数是期望值,第二个参数是要验证的值
}
public void testSubtract()
{
Calculator calculator = new Calculator();
int result = calculator.subtract(1, 2);
// 判断方法的返回结果
Assert.assertEquals(-1, result);// 第一个参数是期望值,第二个参数是要验证的值
}
public void testMultiply()
{
Calculator calculator = new Calculator();
int result = calculator.multiply(2, 3);
// 判断方法的返回结果
Assert.assertEquals(6, result);// 第一个参数是期望值,第二个参数是要验证的值
}
public void testDivide()
{
Calculator calculator = new Calculator();
int result = calculator.divide(12, 3);
// 判断方法的返回结果
Assert.assertEquals(4, result);// 第一个参数是期望值,第二个参数是要验证的值
}
}
  运行一下:右键选择该类,Run As->JUnit Test

  (可以在此处右键选择Run重复运行)
  JUnit的口号:Keep the bar green to keep the code clean.
  5.代码重构:setUp()方法的使用
  有一个原则:DRY(Don’t Repeat Yourself)
  所以对代码进行重构,将重复的生成对象的部分放在setUp()方法中。
  (重写的时候将protected变为public,继承的时候扩大访问范围是没有问题的。)
  先进行一个方法的测试测试:
  在CalculatorTest类中加入代码如下:
  @Override
  public void setUp() throws Exception
  {
  System.out.println("set up");
  }
  @Override
  public void tearDown() throws Exception
  {
  System.out.println("tear down");
  }
  再次运行后发现Console中输出如下:
  说明这两个方法执行了多次。
  在每个测试用例之前执行setUp(),每个测试用例执行之后,tearDown()会执行。
  即对于每个测试用例,执行顺序为:
  1.setUp()
  2.testXXX()
  3.tearDown()
  重构:使用成员变量生成对象(为了能在每个方法中都用到),将生成对象的语句放在setUp()中,注意这里为每一个测试用例都会生成新的对象。
  重构后代码如下:
package com.mengdd.junit;
import junit.framework.Assert;
import junit.framework.TestCase;
public class CalculatorTest extends TestCase
{
private Calculator calculator = null;
@Override
public void setUp() throws Exception
{
System.out.println("set up");
// 生成成员变量的实例
calculator = new Calculator();
System.out.println(calculator);
}
@Override
public void tearDown() throws Exception
{
System.out.println("tear down");
}
public void testAdd()
{
int result = calculator.add(1, 2);
// 判断方法的返回结果
Assert.assertEquals(3, result);// 第一个参数是期望值,第二个参数是要验证的值
}
public void testSubtract()
{
int result = calculator.subtract(1, 2);
// 判断方法的返回结果
Assert.assertEquals(-1, result);// 第一个参数是期望值,第二个参数是要验证的值
}
public void testMultiply()
{
int result = calculator.multiply(2, 3);
// 判断方法的返回结果
Assert.assertEquals(6, result);// 第一个参数是期望值,第二个参数是要验证的值
}
public void testDivide()
{
int result = calculator.divide(12, 3);
// 判断方法的返回结果
Assert.assertEquals(4, result);// 第一个参数是期望值,第二个参数是要验证的值
}
}
  运行后控制台输出:
  说明每一个测试的方法前后都会有setUp()和tearDown()方法的调用,所以每次生成的都是一个新的对象,各个方法之间没有干扰。