bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

關于單元測試及項目質量管理的總結-創新互聯

摘要:如果沒寫單元測試,如若在branch中對之前代碼重構的話,則沒有移回trunck上的勇氣,有了單元測試,全部運行通過后則有信心合并?;ヂ摼W公司更是需要重視單元測試,因為版本迭代比較迅速。因此一個好的單元測試框架及一個好的項目質量管理非常重要。本文即是我對這些的心得體會。關鍵詞:java, 單元測試, TestNG, DbUnit, Spring, 項目管理, 質量管理, PMP解決問題:單元測試該如何實施?項目質量管理該如何執行?
   在開發數據訪問對象DAO層時,我們需要直接對數據層進行增刪改查CRUD操作。單元測試非常重要,因為在開發期間經常需要進行代碼重構,怎樣才能保證代碼重構的正確性呢,怎樣給代碼重構者以信心讓他放手去做呢,需要執行單元測試,只要能保證接口功能不發生任何變化,與代碼重構前完全相同,并且能直觀的感受到這一一致性,開發者便能大膽地去干了。功能開發容易,單元測試難做。第一,單元測試間相互影響:單元測試1對數據A新增的一條數據可能會影響到單元測試2驗證的正確性,你可能會想到在每個單元測試的起始時手動做一遍初始化,比如清理一遍表中數據,以清除其他單元測試的影響,這樣笨且增加工作量。第二,開發者間相互影響:如果有多人同時需要執行測試用例,使用以上的辦法后還是會發生問題,這時我們可能會選擇每個開發者自己搭建一套數據庫(內存或大型),以避免多人間的干擾,這樣還是過于麻煩,且消耗資源。   下面是基于TestNG和DbUnit的單元測試框架,它的基本思想是管理事務,在單元測試起始時使用事務,在單元測試邏輯的最后將事務回滾,因此每個單元測試內對數據庫的操作將不會實際對數據庫有實質性影響,這樣在單元測試中既可以測試邏輯的正確性,又避免影響到了其他單元測試和其他開發者,并且只需要依賴于統一的開發數據庫即可,使用還很方便。以下還使用MyBatis的功能抽象出了一個統一平臺,該統一平臺提供了大多數的公共接口,如增刪改查及批量操作等,大部分的基礎操作可以通過調用這些接口就能完成,不通用的操作傳入SQL語句也可執行。 一、MyBatis統一平臺:MyBatisAngelWang.class
  1. @Repository
    publicclassMyBatisAngelWangimplementsIRepository{
    @Autowired
    privateGeneralDAO generalDAO;
    public<T extendsBase> T get(Class<T> clz,Long id){
    HashMap hashMap= generalDAO.getLogically(clz, id);
    T ret=this.convert(hashMap, clz);
    return ret;
    }
    }
     關于單元測試及項目質量管理的總結
  上面的代碼即對數據庫直接進行了操作,我們需要對此接口編寫單元測試。具體的MyBatis使用方法,及MyBatisAngelWang統一平臺的實現辦法,需要另抽專門章節進行詳細討論。在這里就不做更深入研究了。 二、統一平臺的單元測試:MyBatisAngelWangTest
  1. import org.testng.annotations.Test;
    //@DatabaseSetup(value= "/dbunitData/TestAngelEntity.xml")publicclassMyBatisAngelWangTestextendsAbstractRollbackTest{
    @Autowired
    privateMyBatisAngelWang myBatisAngelWang;
    @Test(enabled=false)
    publicvoid testGet(){
    }
    }

    10年積累的成都網站建設、做網站經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先網站設計后付款的網站建設流程,更有尉犁免費網站建設讓你可以放心的選擇與我們合作。
  可以看到此單元測試MyBatisAngelWangTest.class繼承自一個抽象類:AbstractRollbackTest。
  1. import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.TestExecutionListeners;
    @ContextConfiguration(locations={"classpath:spring-datasource-dbunit.xml",
    "classpath*:spring-services.xml"})
    @TestExecutionListeners({DependencyInjectionTestExecutionListener.class,
    TransactionDbUnitTestExecutionListener.class,TransactionalTestExecutionListener.class})
    @Transactional
    publicclassAbstractRollbackTestextendsAbstractTestNGSpringContextTests{
    }

  此抽象類是由我們自己定義的,其繼承自抽象類:AbstractTestNGSpringContextTests,它由Springframework提供。我們可以通過ContextConfiguration注解來注入spring配置文件。   或者這樣也可以。單元測試MyBatisAngelWangTest.class直接繼承自AbstractTestNGSpringContextTests。減少了一層。
  1. @ContextConfiguration("/config/Spring-db.xml")
    @Transactional
    @ActiveProfiles("test")
    publicclassMyBatisAngelWangTestextends
    AbstractTransactionalTestNGSpringContextTests{}

三、供給單元測試的專用spring配置文件:spring-datasource-dbunit.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
    <beansxmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.2.xsd"default-autowire="byName">
    <description>spring-datasource-configuration</description>
    <beanclass="com.angel.context.ApplicationContextAwareHelper"/>
    <!-- 定義事務管理器(聲明式的事務) -->
    <beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <propertyname="dataSource"ref="dataSource"/>
    </bean>
    <tx:annotation-driventransaction-manager="transactionManager"/>
    <beanid="propertyConfigurer"class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
    <propertyname="locations">
    <list>
    <value>classpath*:props/datasource_dev.properties</value>
    </list>
    </property>
    </bean>
    <beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <propertyname="driverClassName"value="${jdbc.driver}"/>
    <propertyname="url"
    value="${jdbc.dbunit.url}"/>
    <propertyname="username"value="${jdbc.user}"/>
    <propertyname="password"value="${jdbc.password}"/>
    </bean>
    <!-- MyBatis 配置 -->
    <beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <propertyname="basePackage"value="com.angel.*.dao"/>
    <propertyname="sqlSessionFactoryBeanName"value="xSqlSessionFactory"/>
    </bean>
    <beanid="xSqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">
    <propertyname="dataSource"ref="dataSource"/>
    <propertyname="typeAliasesPackage"value="com.angel.*.entities"/>
    <propertyname="configLocation"value="classpath:mybatis/mybatis-config.xml"/>
    <propertyname="mapperLocations"value="classpath:/com/angel/dao/*.xml"/>
    <propertyname="plugins">
    <array>
    <!--page interceptor-->
    <beanclass="com.angel.orm.db.QueryInterceptor"/>
    </array>
    </property>
    </bean>
    <tx:annotation-driventransaction-manager="transactionManager"/>
    </beans>

       這樣大家測試的數據庫都是同一個了,也不會有任何的相互影響了。因為事務回滾了,不信的話可以提交一條Insert測試哦,執行完后查看數據庫中并沒有插入任何數據。然而,在一個單元測試中,先Insert再get是可以取到數據的,神奇吧?!

四、其它:ApplicationContextAwareHelper.class
  1. publicclassApplicationContextAwareHelperimplementsApplicationContextAware{
    privatestaticApplicationContext context;
    @Override
    publicvoid setApplicationContext(ApplicationContext applicationContext){
    context= applicationContext;
    }
    publicstaticApplicationContext getContext(){
    return context;
    }
    }

當我們需要比較動態的獲取某些bean時,需要ApplicationContextAwareHelper類。比如說,我要自己拼接一個bean的名稱,還要獲得該bean,則可以使用下面的代碼來獲取:
  1. DruidDataSource dataSource =ApplicationContextAwareHelper.getBean("dataSource_"+ dataSources[i]);

       當然,這不屬于單元測試的范疇了,有點跑題,但是蠻有用的,在這里記一下。

 五、項目質量管理    通過上面數步就能夠很好的實施單元測試了。然而單元測試說來容易,執行難,有方法了,但推進它又是另外一件事了。在互聯網公司中,很多個小項目并發進行,同時存在,項目成員亦流動性較大,相近的項目會分布在各項目組中。這樣,每個小項目組可能有其自己的規范或是沒有。規范就像法律一樣,是個人素質的最底線、最低層約束。項目開發成員素質較高還好,可能不會引起混亂,當項目組成員多了,素質參差不齊就麻煩了。這時就需要執行項目經理職能的角色出現了。這時項目經理可以且應該具體要求各小組的開發流程、規范。在互聯網項目中沒有項目經理存在的情況下,可以由行政層面或配置項目管理專員來實現?! ‘斎豁椖抠|量管理除了要規范單元測試以外,還有很多其他方法,具體可以查看我的這篇文章:http://www.cnblogs.com/wgp13x/p/4101314.html。其中的B圖-質量管理即體現了項目質量管理的實施辦法,可能不夠細致,有空再詳細敘述一下。   多謝大家的鼓勵! 

來自王安琪

作者:Angel 出處:http://www.cnblogs.com/wgp13x/ 歡迎轉載或分享,但請務必聲明文章出處。如果文章對您有幫助,希望你能推薦或關注。

王安琪,英文名Angel,南京郵電大學計算機應用技術碩士學位。 熟悉Java、C#編程語言。專注于WebService、海量數據處理、搜索引擎技術、消息中間件技術、分布式文件存儲、.NET應用程序開發、系統架構設計。主要從事大數據管理系統的研發,項目經理,系統架構師,就職于江蘇金陵科技集團有限公司。

Email:aitanjupt@hotmail.com

QQ:289770363

當前題目:關于單元測試及項目質量管理的總結-創新互聯
標題來源:http://vcdvsql.cn/article20/dgojjo.html

成都網站建設公司_創新互聯,為您提供品牌網站建設、用戶體驗標簽優化、網站收錄、外貿建站、全網營銷推廣

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都seo排名網站優化