<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jinfeng_wang

    G-G-S,D-D-U!

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      400 Posts :: 0 Stories :: 296 Comments :: 0 Trackbacks

    Junit Test Practices

     

    Now that we've seen JUnit in action, let's step back a little and look at some good practices for writing tests. Although we'll discuss implementing them with JUnit, these practices are applicable to whatever test tool we may choose to use.

     

    Write Tests to Interfaces

    Wherever possible, write tests to interfaces, rather than classes. It's good OO design practice to program to interfaces, rather than classes, and testing should reflect this. Different test suites can easily be created to run the same tests against implementations of an interface (see Inheritance and Testing later).

    對某個類進行測試時,僅測試該類對外公開的接口,適當的測一些其內部的接口。當一個類從其他類繼承方法時,那么對這些方法的測試則不應該由subclass的測試完成,而由parent class的測試完成。

     

    Don't Bother Testing JavaBean Properties

    It's usually unnecessary to test property getters and setters. It's usually a waste of time to develop such tests. Also, bloating test cases with code that isn't really useful makes them harder to read and maintain.

     

    Maximizing Test Coverage

    Test-first development is the best strategy for ensuring that we maximize test coverage. However, sometimes tools can help to verify that we have met our goals for test coverage. For example, a profiling tool such as Sitraka'sJProbe Profiler (discussed in Chapter 15) can be used to examine the execution path through an application under test and establish what code was (and wasn't) executed. Specialized tools such as JProbe Coverage (also part of theJProbe Suite) make this much easier. Jprobe Coverage can analyze one or more test runs along with the application codebase, to produce a list of methods| and even lines of source code that weren't executed. The modest investment in such a tool is likely to be worthwhile when it's necessary to implement a test suite for code that doesn't already have one.

     

    Don't Rely on the Ordering of Test Cases

    When using reflection to identify test methods to execute, JUnit does not guarantee the order in which it runs tests. Thus tests shouldn't rely on other tests having been executed previously. If ordering is vital, it's possible f to add tests to a TestSuite object programmatically. They will be executed in the order in which they were added. However, it's best to avoid ordering issues by using the setup () method appropriately.

     

    Avoid Side Effects

    For the same reasons, it's important to avoid side effects when testing. A side effect occurs when one test changes the state of the system being tested in a way that may affect subsequent tests. Changes to persistent data in a database are also potential side effects.

     

    Read Test Data from the Classpath, Not the File System

    It's essential that tests are easy to run. A minimum of configuration should be required. A common cause of problems when running a test suite is for tests to read their configuration from the file system. Using absolute file paths will cause problems when code is checked out to a different location; different file location and path conventions (such as \home\rodj \tests\foo.dat or C:\\Documents and Settings\ \rodj \ \ f oo.dat) can tie tests to a particular operating system. These problems can be avoided by loading test data from the classpath, with the Class.getResource () or   Class.getResourceAsStream() methods. The necessary resources are usually best placed in the same directory as the test classes that use them.

     

    Avoid Code Duplication in Test Cases

    Test cases are an important part of the application. As with application code, the more code duplication they contain, the more likely they are to contain errors. The more code test cases contain the more of a chore they are to write and the less likely it is that they will be written. Avoid this problem by a small investment in test infrastructure. We've already seen the use of a private method by several test cases, which greatly simplifies the test methods using it.


     

    Inheritance and Testing

    We need to consider the implications of the inheritance hierarchy of classes we test. A class should pass all tests associated with its superclasses and the interfaces it implements. This is a corollary of the "Liskov Substitution Principle", which we'll meet in Chapter 4.

    When using JUnit, we can use inheritance to our advantage. When one JUnit test case extends another (rather than extending junit.framework.TestCase directly), all the tests in the superclass are executed, as well as tests added in the subclass. This means that JUnit test cases can use an inheritance hierarchy paralleling the concrete inheritance hierarchy of the classes being tested.

    In another use of inheritance among test cases, when a test case is written against an interface, we can make the test case abstract, and test individual implementations in concrete subclasses. The abstract superclass can declare a protected abstract method returning the actual object to be tested, forcing subclasses to implement it.

    It's good practice to subclass a more general JUnit test case to add new tests for a subclass of an

    object or a particular implementation of an interface.

    posted on 2005-04-25 16:22 jinfeng_wang 閱讀(839) 評論(0)  編輯  收藏 所屬分類: ZZJunit
    主站蜘蛛池模板: 希望影院高清免费观看视频| 午夜精品射精入后重之免费观看| 在线观看的免费网站| 91在线精品亚洲一区二区| 免费无码中文字幕A级毛片| 亚洲成色在线影院| 无码国产精品一区二区免费3p | 国产.亚洲.欧洲在线| 国产精品免费精品自在线观看| 亚洲精品在线免费观看| 中文字幕免费在线看线人| 亚洲一欧洲中文字幕在线| 在线永久免费观看黄网站| 精品韩国亚洲av无码不卡区| 亚洲国产小视频精品久久久三级 | 亚洲午夜久久久久妓女影院| 国产婷婷成人久久Av免费高清 | 成人免费午夜在线观看| 亚洲日本VA午夜在线电影| 国产小视频免费观看| 国产精品hd免费观看| 亚洲自偷自偷精品| 成人人免费夜夜视频观看| 欧洲美女大片免费播放器视频| 久久久久亚洲av毛片大| 99久久久国产精品免费蜜臀| 亚洲色成人网站WWW永久四虎 | 久久久久久亚洲Av无码精品专口| 老司机在线免费视频| 黄色毛片免费观看| 亚洲av网址在线观看| 毛片免费在线播放| 成人妇女免费播放久久久| 亚洲国产美女视频| va亚洲va日韩不卡在线观看| 日韩精品极品视频在线观看免费 | 亚洲性猛交XXXX| 中文字幕无码视频手机免费看| 免费无码国产在线观国内自拍中文字幕| 亚洲精品你懂的在线观看| 成人免费a级毛片|