`
lvwenwen
  • 浏览: 930520 次
  • 性别: Icon_minigender_1
  • 来自: 魔都
社区版块
存档分类
最新评论

Junit源码分析(圣思园)

阅读更多

Unit Test Lesson 1

1. 使用Junit的最佳实践:

1 新建一个名为testsource 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. 测试类必须要继承于TestCase父类。

8. junit 3.8中,测试方法需要满足如下原则:

1. public

2. void

3. 无方法参数

4. 方法名称必须以test开头

9. Test Case之间一定要保持完全的独立性,不允许出现任何的依赖关系。

10. 我们不能依赖于测试方法的执行顺序。

11. DRYDont Repeat Yourself)。

12. 关于setUptearDown方法的执行顺序:

1 setUp

2 testAdd

3 tearDown

13 两个作业(MyStack的测试用例的编写,文件删除方法的测试用例的编写)

14. 测试之前是什么状态,测试执行完毕后就应该是什么状态,而不应该由于测试执行的原因导致状态发生了变化。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Unit Test Lesson 2

1. 测试类的私有方法时可以采取两种方式:

1 修改方法的访问修饰符,将private修改为defaultpublic(但不推荐采取这种方式)。

2 使用反射在测试类中调用目标类的私有方法(推荐)。

2. TestSuite(测试套件):可以将多个测试组合到一起,同时执行多个测试。

3. JUnit 4全面引入了Annotation来执行我们编写的测试。

4. JUnit 4并不要求测试类继承TestCase父类。

5. 在一个测试类中,所有被@Test注解所修饰的publicvoid方法都是test case,可以被JUnit所执行。

6. 虽然JUnit 4并不要求测试方法名以test开头,但我们最好还是按照JUnit 3.8的要求那样,以test作为测试方法名的开头。

7. JUnit 4中,通过@Before注解实现与JUnit 3.8中的setUp方法同样的功能,通过@After注解实现与JUnit 3.8中的tearDown方法同样的功能。

8. JUnit 4中,可以使用@BeforeClass@AfterClass注解修饰一个public static void no-arg的方法,这样被@BeforeClass注解所修饰的方法会在所有测试方法执行前执行;被@AfterClass注解所修饰的方法会在所有测试方法执行之后执行。

9. @Ignore注解可用于修饰测试类与测试方法,当修饰测试类时,表示忽略掉类中的所有测试方法;当修饰测试方法时,表示忽略掉该测试方法。

10. 参数化测试(Parameters):当一个测试类使用参数化运行器运行时,需要在类的声明处加上@RunWith(Parameterized.class)注解,表示该类将不使用JUnit内建的运行器运行,而使用参数化运行器运行;在参数化运行类中提供参数的方法上要使用@Parameters注解来修饰,同时在测试类的构造方法中为各个参数赋值(构造方法是由JUnit调用的),最后编写测试类,它会根据参数的组数来运行测试多次。

11. JUnit 4中,如果想要同时运行多个测试,需要使用两个注解:@RunWith(Suite.class)以及@Suite.SuiteClasses(),通过这两个注解分别指定使用Suite运行器来运行测试,以及指定了运行哪些测试类,其中的@SuiteClasses中可以继续指定Suite,这样JUnit会再去寻找里面的测试类,一直找到能够执行的Test Case并执行之。

12. JUnitTestCase类中应用了模板方法模式:

 

13. JUnitTestCase类中应用了适配器(Adapter)模式:

 

runBare方法中,通过runTest方法将我们自己编写的testXXX方法进行了适配,使得JUnit可以执行我们自己编写的Test CaserunTest方法的实现如下:

 

runTest方法中,首先获得我们自己编写的testXXX方法所对应的Method对象(不带参数),然后检查该Method对象所对应的方法是否是public的,如果是则调用Method对象的invoke方法来去执行我们自己编写的testXXX方法。

 

 

 

 

 

 

Unit Test Lesson 3

1. 适配器模式(Adapter Pattern)主要分为三种:

1 基于类的继承方式

2 基于对象组合方式

3 缺省的适配器模式(AWTSwing事件模型所采用的模式)

2. 我们学习过的设计模式:(最常用的的几种模式)

1 单例模式(singleton

2 策略模式(Strategy

3 代理模式(static proxy dynamic proxy

4 观察者模式(Observer(红色的为junit使用的模式)

5 装饰模式(Decorator

6 工厂方法模式(Factory Method

7 模板方法模式(Template Method

8 适配器模式(Adapter

9 命令模式(Command

10组合模式(Composite

3. 组合模式(Composite),组合模式有两种实现方式:

1 将管理子元素的方法定义在Composite类中

2 将管理子元素的方法定义在Component接口中,这样Leaf类就需要对这些方法空实现。

4. JUnit中要区分错误(error)与失败(failure

1 错误指的是代码中抛出了异常等影响代码正常执行的情况,比如抛出了ArrayIndexOutOfBoundsException,这就叫做错误。

2 失败指的是我们断言所期待的结果与程序实际执行的结果不一致,或者是直接调用了fail()方法,这叫做失败。

5. JUnit中所使用的观察者模式

 

6. 对于测试类来说,如果一个测试类中有5 个测试方法,那么JUnit 就会创建5 个测试

类的对象,每一个对象只会调用一个测试方法(为了符合命令模式的要求),在添加

方法之前,需要首先判断测试方法是否满足public,void,no-arg,no-return 这些条件,

如果满足则添加到集合当中准备作为测试方法来去执行。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics