Junit4的注意事项
来源:互联网 发布:经济学 知乎 编辑:程序博客网 时间:2024/05/16 11:27
注重规范
代码
package com.zxq;public class Calculate { public int add(int a , int b){ return a+b ; } public int subtract(int a , int b){ return a - b ; } public int multiply(int a , int b){ return a * b ; } public int divide(int a , int b){ return a / b ; }}
测试类
package com.zxq;import static org.junit.Assert.*;import org.junit.Test;import com.zxq.Calculate;public class CalculateTest { @Test public void testAdd() { //测试值是否相同 assertEquals(4, new Calculate().add(1, 3)) ; } @Test public void testMultiply() { assertEquals(9, new Calculate().multiply(3, 3)) ; } @Test public void testSubtract() { assertEquals(0, new Calculate().subtract(3, 3)) ; } @Test public void testDivide() { assertEquals(1, new Calculate().divide(3, 3)) ; }}
注意事项:
1.测试方法上必须使用@Test进行修饰
2.测试方法必须使用public void进行修饰,不能带任何参数
3.新建一个源代码目录来存放我们的测试代码
4.测试类的包应该和被测试类保持一致
5.测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖
6.测试类使用Test作为类名的后缀(规范)
7.测试方法使用test作为方法名的前缀(规范)
测试的结果
- 成功
@Test public void testMultiply() { assertEquals(9, new Calculate().multiply(3, 3)) ; }
- 失败
/* * failures 一般由单元测试使用的预言方法判断失败导致的。 * 表示测试的结果和预期的结果不一致 * errors 代码异常引起的 * 可以产生于测试代码本身的错误 也可以是测试代码中的一个bug * * 测试不是用来证明你是对的,而是来证明你没有错。 */ @Test public void testSubtract() { //预期值 不一样 出现failures assertEquals(1, new Calculate().subtract(3, 3)) ; } @Test public void testDivide() { //除数为0 抛异常 assertEquals(1, new Calculate().divide(3, 0)) ; }
预期值不一样
抛异常
运行流程
package com.zxq;import org.junit.After;import org.junit.AfterClass;import org.junit.Before;import org.junit.BeforeClass;import org.junit.Test;public class JunitDemo { /* * 1.@BeforeClass修饰的方法会在所有方法被调用前被执行, * 而且该方法是静态的,所以当测试类被加载后接着就会运行它, * 而且在内存中它只会存在一份实例,它比较适合加载配置文件。 * 2.@AfterClass所修饰的方法通常用来对资源的清理, * 如关闭数据库的连接 * 3.@Before和@After会在每个测试方法的前后各执行一次。 * */ @BeforeClass public static void setUpBeforeClass() throws Exception { System.out.println("setUpBeforeClass") ; } @AfterClass public static void tearDownAfterClass() throws Exception { System.out.println("tearDownAfterClass") ; } @Before public void setUp() throws Exception { System.out.println("setUp") ; } @After public void tearDown() throws Exception { System.out.println("tearDown") ; } @Test public void test1() { System.out.println("test1") ; } @Test public void test2() { System.out.println("test2") ; }}
Junit4常用注解
/*@Test:将一个方法修饰成测试方法 @Test(expected=xxx(异常类).class):会抛出该异常 @Test(timeout=毫秒 ):设置执行的时间,用于结束死循环或是性能测试 @BeforeClass:所有方法之前执行,且执行一次 static修饰 @AfterClass:所有方法之后执行 static修饰 @Before:每一个测试方法之前执行 @After:每一个测试方法后执行 @Ignore:所修饰的测试方法会被测试运行器忽略@RunWith:可以更改测试运行器, 通过继承org.junit.runner.Runner这个类来写自己的运行器 */ //此处运行不会抛异常 @Test(expected=ArithmeticException.class) public void testDivide() { assertEquals(3,new Calculate().divide(10, 0)) ; } //出现error @Test(timeout=2000) public void testWhile(){ while(true) { System.out.println("Hello World") ; } } @Ignore("....") public void testIgnore(){ while(true) { System.out.println("testIgnore") ; } } //不会抛异常 @Test(timeout=3000) public void testTimeout(){ try { Thread.sleep(2000) ; } catch (InterruptedException e) { e.printStackTrace(); } }
测试套件
package com.suit;import org.junit.Test;public class TestTask1 { @Test public void test() { System.out.print("This is TestTask1...") ; }}
package com.suit;import org.junit.Test;public class TestTask2 { @Test public void test() { System.out.print("This is TestTask2...") ; }}
package com.suit;import org.junit.Test;public class TestTask3 { @Test public void test() { System.out.print("This is TestTask3...") ; }}
package com.suit;import org.junit.runner.RunWith;import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({TestTask1.class,TestTask2.class,TestTask3.class}) public class SuitTest { /* * 测试套件就是组织测试类一起运行的 写一个作为测试套件的入口类,这个类里不包含其他的方法 更改测试运行器Suite.class 将要测试的类作为数组传入Suite.SuiteClasses({}) */}
package com.suit;import static org.junit.Assert.*;import java.util.Arrays;import java.util.Collection;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.Parameterized;import org.junit.runners.Parameterized.Parameters;import com.zxq.Calculate;/* * * 总结: 1.更改默认的测试运行器为RunWith(Parameterized.class) 2.声明变量存放预期值和结果值 3.声明一个返回值为Collection的公共静态方法, 并使用@Parameters进行修饰 例如: public static Collection<Object[]>t(){ return Arrays.asList(new Object[][]{{3,2,1}{4,2,2}}); } 4.为测试类声明一个带有参数的公共构造函数, 并在其中为之声明变量赋值(预期值、输入参数值等) * */@RunWith(Parameterized.class)public class ParameterTest { int expected = 0; int input1 = 0; int input2 = 0; @Parameters public static Collection<Object[]> t() { return Arrays.asList(new Object[][] { { 3, 1, 2 }, { 4, 2, 2 } }); } public ParameterTest(int expected, int input1, int input2) { this.expected = expected; this.input1 = input1; this.input2 = input2; } @Test public void testAdd() { assertEquals(expected, new Calculate().add(input1, input2)); }}
0 0
- Junit4的注意事项
- Junit4使用注意事项
- JUnit4操作步骤及注意事项
- junit4的教程
- Junit4的使用说明
- Junit4的使用说明
- JUnit4的测试类
- Junit4的使用方法
- JUnit4的一个bug
- Junit4常用的断言
- 关于JUnit4的问题
- JUnit4的测试类
- JUnit4的使用
- JUnit4的使用
- Junit4 单元测试的断言
- JUnit4的使用
- Junit4的使用方法
- Junit4的使用方法
- JVM自动内存管理
- onTouchEvent返回值的作用
- java 匿名内部类说明 及其多线程实现继承Thread,实现Runnable
- Permission denied (publickey).
- Objective-C中Delegate,Protocol与Interface的区别
- Junit4的注意事项
- 健身补充蛋白
- string::append
- 50个PHP程序性能优化的方法
- c/c++ 结束进程
- 项目中经验总结,问题记录和后期改善
- 217. Contains Duplicate
- mp4文件格式解析
- uva 10881