Junit单元测试的基本用法
JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。
junit3和junit4区别
1.在junit3中,如果某个类需要测试类,则必须继承TesrCase,如果某个方法需要是测试方法,必须让这个方法通过TestXX开头,在junit3中如果希望某个方法在运行之前运行某个初始化方法,这个方法的名称必须是setUp,如果希望在某个测试方法运行之后运行某个释放资源的方法,这个方法的名称必须是TearDown
2.在junit4中 ,一个pojo类就是一个测试类,测试方法通过@Test来标识,初始化方法通过@Before来标识,释放资源的方法通过@After来标识.但是为力junit4中可以在junit3中使用,习惯于把初始方法命名为setUp,释放资源的方法命名为TearDown,测试方法也同样以test开头
eclipse中如何创建Junit
1、导入junit 4.12 的依赖包
2、创建junit类
JUnit的一些注意事项:
- 测试方法必须使用@Test修饰
- 测试方法必须使用public void进行修饰,不能带参数
- 一般使用单元测试会新建一个test目录存放测试代码,在生产部署的时候只需要将test目录下代码删除即可
- 测试代码的包应该和被测试代码包结构保持一致
- 测试单元中的每个方法必须可以独立测试,方法间不能有任何依赖
- 测试类一般使用Test作为类名的后缀
- 测试方法使一般用test作为方法名的前缀
测试失败说明:
- Failure:一般是由于测试结果和预期结果不一致引发的,表示测试的这个点发现了问题
- error:是由代码异常引起的,它可以产生于测试代码本身的错误,也可以是被测试代码中隐藏的bug
一些常用注解:
- @Test:将一个普通方法修饰成一个测试方法
- @Test(excepted=xx.class): xx.class表示异常类,表示测试的方法抛出此异常时,认为是正常的测试通过的
- @Test(timeout=毫秒数) :测试方法执行时间是否符合预期
- @BeforeClass: 会在所有的方法执行前被执行,static方法
- @AfterClass:会在所有的方法执行之后进行执行,static方法
- @Before:会在每一个测试方法被运行前执行一次
- @After:会在每一个测试方法运行后被执行一次
- @Ignore:所修饰的测试方法会被测试运行器忽略
- @RunWith:可以更改测试运行器org.junit.runner.Runner
- Parameters:参数化注解
转载:https://www.cnblogs.com/qiyexue/p/6822791.html
Junit的各种断言
其中方法:
public static void assertEquals(Object[] expected, Object[] actual)
public static void assertEquals(String message, Object[] expected, Object[] actual)
是JUnit 4 为比较数组添加的两个 assert() 方法.这两个方法以最直接的方式比较数组:如果数组长度相同,且每个对应的元素相同,则两个数组相等,否则不相等。数组为空的情况也作了考虑。 .
常用断言介绍:
1. assertEquals([String message],Object target,Object result) target与result不相等,中断测试方法,输出message
assertEquals(a, b) 测试a是否等于b(a和b是原始类型数值(primitive value)或者必须为实现比较而具有equal方法)
assertEquals断言两个对象相等,若不满足,方法抛出带有相应信息的AssertionFailedError异常。
例如计算器加法功能的测试可以使用一下验证:
Assert.assertEquals(0,result);
2. assertTrue/False([String message],Boolean result) Result为 false/true,中断测试方法,输出message
assertTrue 断言条件为真,若不满足,方法抛出带有相应信息的AssertionFailedError异常。
assertFalse 断言条件为假,若不满足,方法抛出带有相应信息的AssertionFailedError异常。
assertFalse(a) 测试a是否为false(假),a是一个Boolean数值;
3. assertNotNull/Null([String message],Obejct result ) Restult == null/result!=null,中断测试方法,输出message
assertNull 断言对象为null,若不满足,方法抛出带有相应信息的AssertionFailedError异常。
assertNotNull 断言对象不为null,若不满足,方法抛出带有相应信息的AssertionFailedError异常。
assertNotNull(a) 测试a是否非空,a是一个对象或者null;
4.assertSame/NotSame(Object target,Object result) Traget与result 不指向/指向 同一内存地址(实例),中断测试方法,输出message
assertSame 断言两个引用指向同一个对象,若不满足,方法抛出带有相应信息AssertionFailedError异常。
assertNotSame 断言两个引用指向不同对象,若不满足,方法抛出带有相应信息的AssertionFailedError异常。
assertNotSame(a, b) 测试a和b是否没有都引用同一个对象;
5. fail([String message]) 中断测试方法,输出message
Fail 让测试失败,并给出指定信息。
转载:https://www.iteye.com/blog/ryxxlong-716428
代码:
方法类:
public class Calc { //相加 public int add(int a,int b) { return a+b; } //相乘 public int ride(int a,int b) { return a*b; } }
junit测试类:
public class TestCalc { private Calc c; @Before public void setUp() throws Exception { c = new Calc(); System.out.println("直接加载"); } @After public void tearDown() throws Exception { System.out.println("直接结束了"); } @Test public void testAdd() { int sum = c.add(2, 2); //断言值等于4 Assert.assertEquals(4, sum); } @Test public void testRide() { int sum = c.ride(2, 4); //断言值不等于8 Assert.assertNotEquals(8, sum); }