亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > junit
擴展JUnit測試并行程序
作者:網絡轉載 發布時間:[ 2016/6/16 16:25:39 ] 推薦標簽:單元測試 軟件測試工具

  測試并行程序與以往有什么不同 ?
  隨著多核的普及,并行程序的開發已經提上日程。相對串行程序而言,并行程序更有可能出錯。一方面,并行程序的執行序列具有很強的隨機性,線程交錯執行的序列可能每次都不一樣,而只要一個序列有問題,整個程序是不正確的。另一方面,并行程序對大多數程序員來說,都是一個新的領域,經驗相對較少,這是容易出錯的另外一個因素。
  既然如此,我們更需要仔細的測試我們的并行程序和組件了。目前已經有一些 JUnit 擴展可以創建多個線程,同時運行多個測試用例,從而加快測試用例集的執行速度,如 p-unit 。但對于測試并行程序和組件,這些功能并不能滿足所有的需求。因為開發人員通常希望可以精確地控制多個線程之間的同步。
  與測試順序程序相同,我們希望能在測試并行操作之前,首先準備一些測試數據。然后,啟動多個線程測試執行不同的操作。后,等待所有線程結束之后,檢驗結果的正確性。在第二階段中,多個線程能以任意的次序交錯執行。結果的正確性檢查應與線程的執行測序無關。
  標準 JUnit 只捕捉來自主線程的 Exception 。而其他線程中產生的 Exception 則會安靜地被忽略掉,使得我們在子線程運行出錯的情況下仍舊能得到“ Green Bar ”。這顯然不是程序員喜歡的測試行為,我們希望測試結果能正確地反映所有線程的運行結果。
  這種用于并行程序的測試模式會在測試并行程序時會不斷的重復。如果開發人員每次都需要重復創建這些框架,不僅繁瑣,而且容易引入錯誤。通過使用以下介紹的簡單擴展,可以使并行程序的測試變得和順序程序一樣簡單。這種擴展并不影響 JUnit 的其他特性以及各種 IDE 的 JUnit 插件的使用。
  下載并使用擴展框架
  首先,我們給出一個使用新擴展進行并行測試的例子。
  例 1. 使用 JUnit 擴展進行并行測試
  /**
  * @author Zhi Gan
  *
  */
  @RunWith(Parallelized.class)
  @ParallelSetting(threadNumber = { 1, 2, 4, 8 })
  public class TestThreaded {
  Set<String> strSet;
  @Before
  public void setUp() {
  strSet = new LockFreeSet();
  }
  @Test
  public void doNothing() {
  }
  @InitFor("testThread")
  public void putSomeData(int size){
  strSet.add("putSomeData");
  }
  @Threadedpublic void testThread(int rank, int size) {
  // every thread adds element to set
  strSet.add("abcde" + rank);
  }
  @CheckFor("testThread")
  public void checkResult(int size) {
  assertEquals(size+1, strSet.size());
  }
  public static void main(String[] args) {
  for (int i = 0; i < 10; i++)
  JUnitCore.runClasses(TestThreaded.class);
  }
  }
  如果我們在 Eclipse 中運行測試,那么測試完畢之后的 JUnit 視圖如下所示:
  圖 1. 并行測試的完成結果

  Sample figure containing an image
  接下來,我們模擬子線程在運行時拋出異常。
  例 2. 子線程運行時異常
  /**
  * @author Zhi Gan
  *
  */
  @RunWith(Parallelized.class)
  @ParallelSetting(threadNumber = { 1, 2, 4, 8 })
  public class TestThreaded {
  Set<String> strSet;
  @Before
  public void setUp() {
  strSet = new LockFreeSet();
  }
  @Test
  public void doNothing() {
  }
  @InitFor("testThread")
  public void putSomeData(int size){
  strSet.add("putSomeData");
  }
  @Threadedpublic void testThread(int rank, int size) {
  // throw a runtime error in spawned thread
  throw new RuntimeError();
  }
  @CheckFor("testThread")
  public void checkResult(int size) {
  assertEquals(size+1, strSet.size());
  }
  public static void main(String[] args) {
  for (int i = 0; i < 10; i++)
  JUnitCore.runClasses(TestThreaded.class);
  }
  }

上一頁12下一頁
軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 日本高清无卡码一区二区久久 | 婷婷视频网| 国产欧美亚洲精品a | 韩国理伦伦片在线观看 | 98在线视频噜噜噜国产 | 欧美超高清在线观看 | 黄色网址视频在线观看 | 亚洲经典激情春色另类 | 久久精品视 | 在线免费观看污网站 | 黄色毛片在线看 | 美女视频很黄很暴黄是免费的 | 欧美日韩国产不卡在线观看 | 成人久久18免费游戏网站 | 一个人看的www播放视频 | 欧美高清成人videosex | 日韩中文字幕在线观看视频 | 最近免费最新高清中文字幕韩国 | 日本一区二区在线视频 | 久久这里只有精品免费看青草 | 亚洲精品视频久久久 | 老司机精品久久 | 日韩欧美亚洲国产高清在线 | 午夜视频福利在线观看 | 一区二区三区在线观看视频 | 插菊花综合| 欧美视频福利 | 亚洲第一欧美 | 在线视频 二区 | 欧美日本在线一区二区三区 | 2018天天夜夜 | 欧美色图另类图片 | 不卡一区在线观看 | 久久综合偷偷噜噜噜色 | 久久久久香蕉视频 | 亚洲欧美国产精品第1页 | 国产黄大片在线观看 | 亚洲图片欧美视频 | 中文有码视频 | 日韩在线视频在线 | 亚洲欧洲精品成人久久曰 |