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

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

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

    MDA/MDD/TDD/DDD/DDDDDDD
    posts - 536, comments - 111, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    spring2.5與junit整合的筆記

    Posted on 2009-01-04 18:13 leekiang 閱讀(1907) 評論(0)  編輯  收藏 所屬分類: spring測試
    1,為了盡量平穩(wěn)過渡,繼續(xù)用junit3.8,而不是直接使用junit4
    2,@ContextConfiguration(locations = { "classpath:applicationContext-sys.xml",
    ?? ??? ?"classpath:applicationContext.xml" })
    public class BaseTests extends AbstractTransactionalJUnit38SpringContextTests {
    }
    所有的TestCase都繼承上面這個類,使得spring配置文件重用,同時ApplicationContext也是同一個。

    3,要測試的service類通過@Autowired注入,例如
    ??? @Autowired
    ?? ?private UserDAO? userDAO;
    ?? ?
    4,注意,對于繼承了BaseTests的測試類里的每一個test方法,運(yùn)行測試時都會按
    ?? setUp()-->test方法-->tearDown()的順序執(zhí)行,而且這3個組成一個事務(wù),執(zhí)行完后默認(rèn)會回滾。
    ?? 如果不想回滾,在類名前面@TransactionConfiguration(defaultRollback = false)
    ? ?
    5,因?yàn)檫€是用的junit3.8,故TestSuite的寫法照舊
    ? public class SuiteTests {
    ?? ?public static Test suite() {
    ?? ??? ?TestSuite suite = new TestSuite("運(yùn)行所有測試");
    ?? ??? ?suite.addTestSuite(UserServiceTests.class);
    ?? ??? ?suite.addTestSuite(RoleServiceTests.class);
    ?? ??? ?return suite;
    ?? ?}
    }

    6,測試類并沒有當(dāng)作bean配置在application.xml文件中,
    ?? spring測試框架是如何使"setUp()-->test方法-->tearDown()"處于同一個事務(wù)的呢?
    ?? 具體就要看AbstractTransactionalJUnit38SpringContextTests了,是通過注解實(shí)現(xiàn)的。
    ?? service方法在test方法里面,這兩個方法都配置有事務(wù),即形成了事務(wù)的嵌套,這里有點(diǎn)復(fù)雜了,我還沒想清楚。
    ?? 不過可以肯定的是,如果test方法的事務(wù)不提交,那么service方法的事務(wù)也不會提交。
    ? ?
    7,如果想在jdk1.4下重用ApplicationContext,可采用以下的辦法,出處再補(bǔ)上。這個辦法與前面的進(jìn)行比較,
    ?? 我覺得最大的區(qū)別是這種寫法要手動進(jìn)行測試數(shù)據(jù)的清除。
    public class BaseTestCase extends TestCase {
    ?? ? static ApplicationContext context = null;

    ?? ?static {
    ?? ??? ?// perform the "global" set up logic
    ?? ??? ?// 這里的代碼會在類初始化時執(zhí)行,所以相當(dāng)于BeforeClass
    ?? ??? ?String[] CONFIG_FILES_MIN = { "applicationContext-sys.xml",
    ?? ??? ??? ??? ?"applicationContext.xml" };
    ?? ??? ?context = new ClassPathXmlApplicationContext(CONFIG_FILES_MIN);
    ?? ??? ?System.out.println("setup");

    ?? ??? ?// and now register the shutdown hook for tear down logic
    ?? ??? ?// 將一個匿名方法寫到這里,就相當(dāng)于AfterClass
    ?? ??? ?Runtime.getRuntime().addShutdownHook(new Thread() {
    ?? ??? ??? ?public void run() {
    ?? ??? ??? ??? ?System.out.println("shutdown");
    ?? ??? ??? ?}
    ?? ??? ?});
    ?? ?}

    ?? ?protected void setUp() throws Exception {
    ?? ?}
    }

    8,如果用junit-4.jar,去官網(wǎng)下載junit4.4.jar。不要采用myeclipse自帶的junit4.jar,因?yàn)檫@個不帶JUnit4ClassRunner類。
    ?? 另外不要用junit-4.5.jar,據(jù)說與spring2.5有沖突,
    ?? 詳見Spring Test Context Framework not compatible with JUnit 4.5,http://jira.springframework.org/browse/SPR-5145


    9,String htmlContent = "<html><head></head><body>html content</body></html>";
    String plainContent = "plain content";

    MockMultipartHttpServletRequest req = new MockMultipartHttpServletRequest();
    req.setContentType("multipart/form-data");
    //req.addHeader("Content-type", "multipart/form-data");//這樣寫應(yīng)該是一樣的
    req.setMethod("POST");
    req.addFile( new MockMultipartFile("file","test1.html","text/html", htmlContent.getBytes( "US-ASCII" ) ) );
    req.addFile( new MockMultipartFile("file","test2.html","text/html", htmlContent.getBytes( "US-ASCII" ) ) );
    req.addFile( new MockMultipartFile("file","test.txt", "text/plain",plainContent.getBytes( "US-ASCII" ) ) );
    assertTrue( ServletFileUpload.isMultipartContent( req ) );
    int content_length = req.getContentLength();

    10,AbstractTransactionalJUnit38SpringContextTests
    ??? AbstractTransactionalSpringContextTests
    ??? AbstractTransactionalDataSourceSpringContextTests
    的區(qū)別?

    11,MockHttpServletRequest的addParameter方法和setParameter的區(qū)別


    參考:
    詳細(xì)講解在Spring中進(jìn)行集成測試
    http://www.javaeye.com/topic/68185
    http://www.google.cn/codesearch/p?hl=zh-CN#Vq-IOboH1tI/trunk/test/es/peerreview/service/TestPeerReviewSpring.java
    用Spring提供的JUnit框架擴(kuò)展對DAO或Service層進(jìn)行單元測試
    http://code.google.com/p/anewssystem/source/browse/trunk/anewssystem/parent/core/src/main/java/anni/core/test/?r=105
    http://docs.huihoo.com/spring/2.5.x/zh-cn/testing.html
    http://arkxu.javaeye.com/blog/261679
    http://www.ibm.com/developerworks/cn/java/j-cb06066.html
    http://www.ibm.com/developerworks/cn/java/j-lo-spring25-test/
    基于mock對象和JUnit框架簡化Spring Web組件單元測試
    http://www.tkk7.com/calvin/archive/2005/09/21/13628.html
    http://www.yybean.com/testing-framework-to-use-spring-integration-testing


    主站蜘蛛池模板: 日本一道在线日本一道高清不卡免费| 在线看片无码永久免费视频| 国产成人免费高清激情明星| 国产男女猛烈无遮挡免费网站| 亚洲乱码一区二区三区在线观看 | heyzo亚洲精品日韩| 亚洲自偷自拍另类12p| 国产成人+综合亚洲+天堂| a级成人毛片免费视频高清| 永久免费AV无码国产网站| 国产亚洲一区二区三区在线| 亚洲国产成人无码AV在线| 女人体1963午夜免费视频| 国产免费午夜a无码v视频| 亚洲成年人电影网站| a级成人毛片免费图片| 免费人成年轻人电影| 亚洲视频无码高清在线| 人妻无码久久一区二区三区免费| 亚洲一区二区三区免费| 国产亚洲视频在线观看| 成年人性生活免费视频| 亚洲视屏在线观看| 叮咚影视在线观看免费完整版| 亚洲AV中文无码乱人伦| 亚洲一区二区无码偷拍| 毛片在线看免费版| 亚洲av乱码一区二区三区香蕉 | 国产精品亚洲mnbav网站| 无遮挡呻吟娇喘视频免费播放| 成人免费看片又大又黄| 国产精品亚洲四区在线观看| 50岁老女人的毛片免费观看| 亚洲免费在线视频| 91视频免费网址| 亚洲精品成人久久| 香蕉97超级碰碰碰免费公| 亚洲日本va一区二区三区| 热99re久久免费视精品频软件| 亚洲国产精品嫩草影院| 亚洲国产一区视频|