1.使用Junit的最佳实践:
1) 新建一个名为test的source folder,用于存放测试类源代码
2) 目标类与测试类应该位于同一个包下面,这样测试类中就不必导入源代码所在的包,因为他们位于同一个包下面
3) 测试类的命名规则:假如目标类是Calculator,那么测试类应该命名为TestCalculator或者是CalculatorTest
2.Junit的口号:keep the bar green to keep the code clean。
3.名言:No reflection, no most frameworks
4.Junit:单元测试不是为了证明您是对的,而是为了证明您没有错误。
5.测试用例(Test Case)是单元测试的一个很重要的方面。
6.单元测试主要是用来判断程序的执行结果与自己期望的结果是否一致。
7.测试之前是什么状态,测试执行完毕后就应该是什么状态,而不应该由于测试执行的原因导致状态发生了变化。
Junit3
7.测试类必须要继承于TestCase父类。
8.在junit 3.8中,测试方法需要满足如下原则:
1). public的
2). void的
3). 无方法参数
4). 方法名称必须以test开头
9. Test Case之间一定要保持完全的独立性,不允许出现任何的依赖关系。
10. 我们不能依赖于测试方法的执行顺序。
11. DRY(Don’t Repeat Yourself)。
12. 关于setUp与tearDown方法的执行顺序:
1) setUp
2) testAdd
3) tearDown
13. 测试类的私有方法时可以采取两种方式:
1) 修改方法的访问修饰符,将private修改为default或public(但不推荐采取这种方式)。
2) 使用反射在测试类中调用目标类的私有方法(推荐)。
14.TestSuite(测试套件):可以将多个测试组合到一起,同时执行多个测试。
Junit4:
JUnit 4全面引入了Annotation来执行我们编写的测试。
JUnit 4并不要求测试类继承TestCase父类。
在一个测试类中,所有被@Test注解所修饰的public,void方法都是test case,可以被JUnit所执行。
虽然JUnit 4并不要求测试方法名以test开头,但我们最好还是按照JUnit 3.8的要求那样,以test作为测试方法名的开头。
在JUnit 4中,通过@Before注解实现与JUnit 3.8中的setUp方法同样的功能,通过@After注解实现与JUnit 3.8中的tearDown方法同样的功能。
在JUnit 4中,可以使用@BeforeClass与@AfterClass注解修饰一个public static void no-arg的方法,这样被@BeforeClass注解所修饰的方法会在所有测试方法执行前执行;被@AfterClass注解所修饰的方法会在所有测试方法执行之后执行。
@Ignore注解可用于修饰测试类与测试方法,当修饰测试类时,表示忽略掉类中的所有测试方法;当修饰测试方法时,表示忽略掉该测试方法。
参数化测试(Parameters):当一个测试类使用参数化运行器运行时,需要在类的声明处加上@RunWith(Parameterized.class)注解,表示该类将不使用JUnit内建的运行器运行,而使用参数化运行器运行;在参数化运行类中提供参数的方法上要使用@Parameters注解来修饰,同时在测试类的构造方法中为各个参数赋值(构造方法是由JUnit调用的),最后编写测试类,它会根据参数的组数来运行测试多次。
在JUnit 4中,如果想要同时运行多个测试,需要使用两个注解:@RunWith(Suite.class)以及@Suite.SuiteClasses(),通过这两个注解分别指定使用Suite运行器来运行测试,以及指定了运行哪些测试类,其中的@SuiteClasses中可以继续指定Suite,这样JUnit会再去寻找里面的测试类,一直找到能够执行的Test Case并执行之。
Juint3和Junit4集合运行测试类的区别
在junit4中,如果想要同时运行多个没心工,需要使用两个注解:@RunWith(Suite.class)以及@SuteClasses(),通过这两个注解分别指定使用Suite运行器来运行测试,以及指定了运行哪些测试类,其中的@SuiteClasses中可以继续指定Suite,这样Junit会再去寻找里面的测试类,一直找到能够执行的TestCase并执行之:
Junit3:
package com.junit.test;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class TestAll extends TestCase {
public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTestSuite(TestCalcular.class);
suite.addTestSuite(TestMyStack.class);
return suite;
}
}
Junit4:
package com.junit.test;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({CalcularTest.class,TestMyStack.class})
public class TestAll {
}