`
echozhjun
  • 浏览: 49852 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

源码阅读小记(JUNIT)

阅读更多
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 1      /**
 2      * Creates a default TestResult object
 3      *
 4      * @see TestResult
 5      */
 6     protected TestResult createResult() {
 7         return new TestResult();
 8     }
 9     /**
10      * A convenience method to run this test, collecting the results with a
11      * default TestResult object.
12      *
13      * @see TestResult
14      */
15     public TestResult run() {
16         TestResult result= createResult();
17         run(result);
18         return result;
19     }
20     /**
21      * Runs the test case and collects the results in TestResult.
22      */
23     public void run(TestResult result) {
24         result.run(this);
25         }

这三个函数,如果要是我自己写的话,估计就写成一个函数了。对功能的拆分要细呀,这样才能达到重用的目的。而通常一开始程序都会写成一个程序,然后再根据功能的细分重构成三个不同的函数。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 1     /**
 2      * Runs the test case and collects the results in TestResult.
 3      */
 4     public void run(TestResult result) {
 5         result.run(this);
 6     }
 7     /**
 8      * Runs the bare test sequence.
 9      * @throws Throwable if any exception is thrown
10      */
11     public void runBare() throws Throwable {
12         Throwable exception= null;
13         setUp();
14         try {
15             runTest();
16         } catch (Throwable running) {
17             exception= running;
18         }
19         finally {
20             try {
21                 tearDown();
22             } catch (Throwable tearingDown) {
23                 if (exception == null) exception= tearingDown;
24             }
25         }
26         if (exception != nullthrow exception;
27     }
28     /**
29      * Override to run the test and assert its state.
30      * @throws Throwable if any exception is thrown
31      */
32     protected void runTest() throws Throwable {
33         assertNotNull("TestCase.fName cannot be null", fName); // Some VMs crash when calling getMethod(null,null);
34         Method runMethod= null;
35         try {
36             // use getMethod to get all public inherited
37             // methods. getDeclaredMethods returns all
38             // methods of this class but excludes the
39             // inherited ones.
40             runMethod= getClass().getMethod(fName, (Class[])null);
41         } catch (NoSuchMethodException e) {
42             fail("Method \""+fName+"\" not found");
43         }
44         if (!Modifier.isPublic(runMethod.getModifiers())) {
45             fail("Method \""+fName+"\" should be public");
46         }
47 
48         try {
49             runMethod.invoke(this);
50         }
51         catch (InvocationTargetException e) {
52             e.fillInStackTrace();
53             throw e.getTargetException();
54         }
55         catch (IllegalAccessException e) {
56             e.fillInStackTrace();
57             throw e;
58         }

59     } 

 在TestCase中,run函数的参数为TestResult,并且将自己传给TestResult.run方法作为参数。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 1      /**
 2      * Runs a TestCase.
 3      */
 4     protected void run(final TestCase test) {
 5         startTest(test);
 6         Protectable p= new Protectable() {
 7             public void protect() throws Throwable {
 8                 test.runBare();
 9             }
10         };
11         runProtected(test, p);
12 
13         endTest(test);
14     }
15     /**
16      * Runs a TestCase.
17      */
18     public void runProtected(final Test test, Protectable p) {
19         try {
20             p.protect();
21         } 
22         catch (AssertionFailedError e) {
23             addFailure(test, e);
24         }
25         catch (ThreadDeath e) { // don't catch ThreadDeath by accident
26             throw e;
27         }
28         catch (Throwable e) {
29             addError(test, e);
30         }

31     } 

 然后在TestResult中,再调用TestCase.runBare方法,执行真正的测试用例。

之所以这样来来回回的原因,目前我想到的:TestResult类主要的作用是维护测试失败和测试错误的情况,当然失败和错误的曾删改也在这个类中了。增删改同时就需要通知观察者执行相应的操作。正是因为这样,所以定义了Protectable这个接口来管理失败和错误的情况。在TestResult中调用,就可以在这里捕获这些失败和错误的异常信息,管理好失败和错误列表,同时通知观察者了。 

分享到:
评论

相关推荐

    junit 的源码jar包

    junit 的源码jar包 junit 的源码jar包 junit 的源码jar包

    基于java的开发源码-junit4 jar包 Java单元测试框架绿色免费版.zip

    基于java的开发源码-junit4 jar包 Java单元测试框架绿色免费版.zip 基于java的开发源码-junit4 jar包 Java单元测试框架绿色免费版.zip 基于java的开发源码-junit4 jar包 Java单元测试框架绿色免费版.zip 基于java的...

    Junit4完整源码

    JUnit4源码的完整版本包含了整个框架的实现细节,对于理解其工作原理、学习测试驱动开发(TDD)以及进行自定义扩展非常有帮助。 1. **JUnit核心概念**: - **Test Case**:在JUnit4中,测试用例是通过继承`org....

    junit in action 源码

    这本书的源码包含了书中提到的各种示例和实践案例,是学习和理解JUnit功能及其实现原理的重要资源。 JUnit是Java编程语言中最常用的单元测试框架之一,由Erich Gamma和Kent Beck开发,最初作为Extreme Programming...

    junit4 单元测试源码

    【标题】"junit4 单元测试源码"涉及的是Java编程中单元测试的重要工具JUnit4的使用,这是对代码进行验证和调试的关键部分。JUnit4是JUnit框架的一个版本,它提供了更灵活的注解、测试套件管理和断言方式,使得编写...

    Junit Recipes 源码

    《Junit Recipes 源码》是一份宝贵的资源,它包含了一系列与单元测试相关的实践案例,主要用于学习和应用JUnit测试框架。JUnit是Java编程语言中最常用的单元测试工具,它为开发者提供了一种简单且强大的方式来编写可...

    junit源码以及牵涉到的设计模式

    ### JUnit源码及其涉及的设计模式 #### 一、引言 JUnit作为一款广泛应用于Java项目的单元测试框架,其设计理念和实现方式对于软件开发者来说具有很高的学习价值。本文将深入探讨JUnit源码,并重点关注其中使用的...

    Junit4单元测试源码

    JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。 [1] JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是...

    JUnit4.8.1源码包

    JUnit4.8.1源码包 版本4.8.1 只有源码。

    junit4 jar包以及源码

    通过查看源码,开发者可以深入探究JUnit的内部实现,如测试监听器、测试装饰器、异常处理机制等。这有助于在遇到问题时进行调试,或者自定义JUnit的行为以适应特定项目需求。同时,源码分析也有助于学习最佳实践和...

    Junit源码分析(圣思园)

    **Junit源码分析(圣思园)** Junit是Java编程语言中最广泛使用的单元测试框架,它使得开发者能够...阅读和学习Junit源码不仅能够帮助我们写出更健壮的测试用例,也能够提高我们的编程技能,理解测试框架背后的原理。

    junit4测试源码

    这个"junit4测试源码"可能包含了JUnit4框架的源代码,使得用户能够深入理解其内部工作原理,便于自定义扩展或学习测试驱动开发(TDD)的最佳实践。 首先,JUnit4引入了注解(Annotation)的概念,使得测试类和测试...

    junit-jupiter-5.5.1.rar

    JUnit5相关的 JUnit Jupiter.jar依赖包,主要包含: junit-jupiter-5.5.1.jar,junit-jupiter-api-5.5.1.jar,junit-jupiter-engine-5.5.1.jar,junit-jupiter-params-5.5.1.jar,junit-jupiter-api-5.4.2.jar,...

    Junit jar包以及 Junit 源码包

    Junit jar包以及 Junit 源码包

    junit-4.4包+源码

    通过阅读源码,你可以了解如何实现测试监听器(TestListener),自定义测试规则(TestRule),或者创建自己的测试注解和运行器。 例如,JUnit的核心类`org.junit.runner.JUnitCore`负责启动和管理测试执行,`org....

    junit4.12源码

    junit4.12源码,便于查看源码,重写方法,为己所用。

    自定义junit源码

    自定义JUnit源码是一个对Java开发人员非常有帮助的主题,特别是对于那些想要深入理解测试框架工作原理或希望根据自身需求定制测试工具的开发者。JUnit是一个广泛使用的单元测试框架,它简化了编写和运行针对Java代码...

    Junit设计模式分析(带源码)

    本资源"Junit设计模式分析(带源码)"旨在深入探讨JUnit在设计上的模式和最佳实践,通过源码分析帮助开发者更好地理解和应用这个工具。 1. 单元测试基础: 单元测试是对软件中的最小可测试单元进行检查,如函数、...

    junit4测试数据库源码

    本资料包"junit4测试数据库源码"主要涵盖了Junit4的新特性assertThat断言以及如何利用Junit4进行MySQL和Oracle两种主流数据库的增删改查操作的测试。 首先,我们来了解一下Junit4的assertThat断言。在旧版本的Junit...

    junit-example-源码.rar

    通过阅读和研究JUnit的源码,我们可以学习到如何正确地编写测试代码,如何设计高效的测试策略,以及如何调试和优化测试框架。此外,源码中还可能包含一些高级特性的实现,如参数化测试、异步测试和规则(Rule)机制...

Global site tag (gtag.js) - Google Analytics