Java測試提示

介紹

我喜歡自動化測試。 在一次極少的轉移到op-ed 1中,我想到了一些想法(閱讀–意見)。

在開始如何最好地構成您的測試之前,我先簡單問一下–測試的原因是什么? 大致來說,我認為它們是:

  1. 減少錯誤總數/提高產品穩定性
  2. 確保軟件按照規范運行
  3. 以低成本,低影響實現上述目標。

我認為這可以歸結為提供可以滿足客戶需求(功能),不執行客戶不想要的功能(錯誤)的軟件,并且不會造成太大的噪音(成本)。

選擇系統

選擇一個入門門檻低,人們渴望學習或已經知道的系統:

  1. 在其中有價值的學習中,例如流行的行業標準,這些系統將得到更好的文檔記錄,更好的理解,更可靠,并且您的同事將更容易加入。
  2. 我的意思是使用“范式”系統,即按原意使用它,而不是以異常的“范式”方式使用,這將使您的同事生活困難,并阻止采用。

您可以測試多個配置,其中某些測試僅適用于某些模塊和配置嗎?

它堅固嗎?

  1. 對測試對象的更改是否容易導致識別需要更改的測試? 對基礎實現的更改不應默默地破壞測試。
  2. 避免使用完全動態的語言,編譯時檢查可防止出現印刷錯誤,并確定如果測試主題發生更改可能需要更改的測試。

考慮一下該系統對于開發人員和技術水平較低的人員是否都可以使用–您是否希望測試人員或QA能夠編寫測試?

曾幾何時,我認為這毫無疑問:測試系統是否完全自動化? 還是,每當您運營公司時,都會花您公司的錢嗎?

寫作測試

測試應該快速運行并快速編寫:

  1. 編寫測試不應要求耗時的數據庫,DLL或環境設置,而是要使這種性質的東西自動化。
  2. 您不需要對定制系統的默契知識,沒有人愿意沉迷于繁瑣的手動設置。 這只是成本。
  3. 問問自己–是否只需單擊一個按鈕即可進行其他人的測試?
  4. 測試本身無需花費很長時間即可編寫。

不要混淆測試的生產代碼:

  1. 不必擔心編寫最“有效的Java”測試代碼或重復使用。 字段不必是“私有最終”。
  2. 您無需在測試中強制執行編碼標準。

測試行為,而不是方法(@Test使testMethodX無效嗎?):

  1. 考慮一個基于BDD的系統。

考慮為接口編寫測試,然后使用 參數化的運行程序,它將為每個實現運行相同的測試集。

測試失敗應明確反饋給修復程序:

  1. 捕獲測試的輸出,以便可以診斷故障。
  2. 確保可以將失敗的測試與其套件隔離運行,以便您專注于修復失敗的測試。
  3. 測試失敗,修復錯誤的代碼和重新運行測試之間的平均時間是多長時間?

測試支持和測試雙打

文檔支持代碼:

  1. 如果人們不知道測試雙打或夾具,也不會重復使用。

對于JUnit,請考慮使用@Rules為測試提供mixin- esq組件。

首選假貨:

  1. 與存根,假人或模擬物相比,它們通常更具通用性和可重用性。
  2. 與其他類型的雙打相比,它們將使您對主題有更好的了解。
  3. 他們通常可以與實現共享一個代碼,從而進行測試。
  4. 具有通過接口直接控制偽造品的能力,例如將組件置于普通API無法激發的錯誤模式,例如網絡問題或硬件故障。

偽造第三方:

  1. 在我的工作中,有大量與硬件相關的JNI / JNA代碼。 通過僅偽造JNI方法,我們可以模擬各種事情,包括失敗超時。 我通過偽造串行設備,偽造javax.comm.SerialPort并用模擬失敗或其他錯誤的偽數據將其預加載來完成了類似的工作。
  2. 這將與RESTful API等同樣有效。

運行測試

現實點”:

  1. 最好使用真實的代碼而不是使用偽造品在具有代表性的設置上運行測試。
  2. 嘗試在容器外運行測試,以便在盡可能接近生產設置的情況下運行該軟件。
  3. 如果軟件在特定的環境上運行,也可以在特定的環境下運行測試,即集成測試之前要進行部署(及其隱式測試),這反過來意味著部署應該是一個按鈕。

然后使之可重復:

  1. 一個人編寫的測試可以很容易地被另一個人訪問,即版本控制。
  2. 無需繁瑣,容易出錯的工作即可將測試納入版本控制和單按鈕提交。
  3. 它們可以在您的開發機以外的計算機上運行嗎?
  4. 如果不是自動化的話,就不會重復。

與構建系統集成:

  1. 測試應該在開發機器上運行,并且CI服務器和QA中的每次運行都將使您對成品更有信心。
  2. 它們應該在CI中運行,可能沒有頭,并同時執行相同的測試。 他們是否使用相同的硬編碼目錄? 他們在同一端口上監聽嗎?

參考: 測試我們JCG伙伴亞歷克斯·柯林斯在亞歷克斯·柯林斯的博客博客。


翻譯自: https://www.javacodegeeks.com/2012/08/tips-for-testing-with-java.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371240.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371240.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371240.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

pdo mysql fedora_在Fedora 23 Server和Workstation上安裝LAMP(Linux, Apache, MariaDB和PHP)

在安裝LAMP之前,建議先更新系統包$ sudo dnf update第一步:安裝Apache Web服務器1.在Fedora 23安裝Apache,你可以運行下面的命令:$ sudo dnf install httpd2.安裝完成后,我們設置在系統啟動時自動啟動Apache&#xff0…

洛谷P1937 [USACO10MAR]倉配置Barn Allocation

題目描述 Farmer John recently opened up a new barn and is now accepting stall allocation requests from the cows since some of the stalls have a better view of the pastures. The barn comprises N (1 < N < 100,000) stalls conveniently numbered 1..N; sta…

人臉數據庫大全(包括人臉識別、關鍵點檢測、表情識別,人臉姿態等等)

搞計算機視覺的人&#xff0c;對人臉技術并不陌生。在做實驗的時候需要各種數據集進行訓練&#xff0c;卻往往苦于找不到合適的數據集&#xff0c;這篇文章將給大家帶來一點福音。 目前為止最全的是人臉數據庫總結&#xff1a; The Color FERET Database, USA The FERET progra…

JavaFX游戲(四連環)

這是我的第一個JavaFX游戲教程&#xff0c;也是我關于JavaFX面板的第一篇博客文章。 我僅用200幾行代碼就完成了這款四連環游戲&#xff0c;足以應付一個簡單的游戲。 我在這里使用GridPane面板對磁盤進行布局&#xff0c;GridPane是JavaFX布局窗格之一&#xff0c;但它與另一個…

vs使用了未初始化的局部變量怎么解決_C程序為什么要初始化?

作者:守望,Linux應用開發者,目前在公眾號【編程珠璣】 分享Linux/C/C++/數據結構與算法/工具等原創技術文章和學習資源。 前言 什么是初始化?為什么要初始化?靜態變量和局部變量的初始化又有什么區別?實際應用中應該怎么做?本文將一一回答這些問題。 什么是初始化 初始化…

maven 配置 pom.xml 打包生成:單jar包/jar包+lib目錄

http://www.jianshu.com/p/9146cec6cc60轉載于:https://www.cnblogs.com/Baronboy/p/7510942.html

zabbix安裝MySQL失敗_MySQL數據庫之zabbix3.x安裝出現“configure: error: Not found mysqlclient library”的解決辦法...

本文主要向大家介紹了MySQL數據庫之zabbix3.x安裝出現“configure: error: Not found mysqlclient library”的解決辦法 &#xff0c;通過具體的內容向大家展現&#xff0c;希望對大家學習MySQL數據庫有所幫助。如題所示&#xff0c;在CentOS6.x的系統中安裝zabbix3.x&#xff…

拼圖項目:延期的后果

Mark Reinhold先生于2012年7月宣布 &#xff0c;他們計劃從Java 8撤回Jigsaw項目 &#xff0c;因為Jigsaw計劃于2013年9月&#xff08;從現在開始一年&#xff09;推遲其發布。 這個日期是眾所周知的&#xff0c;因為Oracle已決定實施Java的兩年路線圖計劃&#xff0c;因此2013…

Navicat下Oracle數據泵的使用簡單例子

如何使用Navicat等數據庫開發工具進行高效開發將是未來工作的重點。Navicat一來美觀而來夠操作夠傻瓜&#xff0c;使用得當其強大功能與PL SQL不相上下。今天學習就是如何在Navicat中使用數據泵進行數據導入導出。 數據泵使用前事項&#xff1a;想使用數據泵必須以sys或system等…

前端自動化之nvm安裝

nvm ——node環境版本控制工具。 1.解壓安裝包 2.打開setting文件&#xff0c;修改文件內容 root: D:\node\nvm path: D:\node\nodejs arch: 64 proxy: root&#xff1a;當前nvm所在的路徑 path&#xff1a;將root路徑的nvm改為nodejs arch&#xff1a;64位系統 3.配置環境變量…

mysql 主從復制介紹_MySQL 主從復制介紹

一、MySQL 主從復制簡介(1) MySQL 主從復制通過邏輯的 binlog 日志復制到要同步的服務器本地&#xff0c;然后由本地的線程讀取日志里面的 SQL 語句&#xff0c;重新應用到 MySQL 數據庫中(2) 在復制過程中&#xff0c;一臺服務器充當主服務器&#xff0c;接收來自用戶的內容更…

【Java面試題】18 java中數組有沒有length()方法?string沒有lenght()方法?下面這條語句一共創建了多少個對象:String s=a+b+c+d;...

數組沒有length()這個方法&#xff0c;有length的屬性。String有有length()這個方法。 int a[]; a.length;//返回a的長度 String s; s.length();//返回s的長度 java中數組沒有length()方法&#xff0c;求數組的長度可以使用數組的length屬性。 int[] arr{1,2,3,4,5};int length…

Spring范圍代理

考慮以這種方式定義的兩個Spring bean&#xff1a; Component class SingletonScopedBean{Autowired private PrototypeScopedBean prototypeScopedBean;public String getState(){return this.prototypeScopedBean.getState();} }Component Scope(value"prototype")…

遞歸和分治的概念性的理解

遞歸的概念表述&#xff1a; 直接或間接調用自身的算法稱為遞歸算法。 理解&#xff1a;遞歸算法的可以理解為多個算法的嵌套調用&#xff0c;只是調用算法是同一個&#xff0c;同時需要一個工作棧來作為各層次的數據存儲區&#xff0c;包括所有實參指針&#xff0c;局部變量&a…

ibatis mysql sqlmapconfig_iBATIS sqlMapConfig配置詳解

1 <?xml version"1.0" encoding"UTF-8"?>2 "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">5 6 11 13 enhancementEnabled"true"14 lazyLoadingEnabled"true"15 errorTracingEnabled"true"16 m…

什么情況使用 weak 關鍵字,相比 assign 有什么不同?

什么情況使用 weak 關鍵字&#xff1f; 在 ARC 中,在有可能出現循環引用的時候,往往要通過讓其中一端使用 weak 來解決,比如: delegate 代理屬性 自身已經對它進行一次強引用,沒有必要再強引用一次,此時也會使用 weak,自定義 IBOutlet 控件屬性一般也使用 weak&#xff1b;當然…

使用Spring Redis發布/訂閱

繼續發現功能強大的Redis功能集&#xff0c;值得一提的是對發布/訂閱消息的開箱即用支持。 發布/訂閱消息傳遞是許多軟件體系結構的重要組成部分。 某些軟件系統要求消息傳遞解決方案提供高性能&#xff0c;可伸縮性&#xff0c;隊列持久性和持久性&#xff0c;故障轉移支持&am…

python在律師上作中的實例_python-基礎面試題

深拷貝1.對象A拷貝&#xff0c;生成對象B&#xff0c;且我們修改對象B(對象A)中的數據或方法&#xff0c;對象A(對象B)不會受影響&#xff0c;這就是深拷貝2.對于可變與不可變類型對于不可變類型&#xff0c;深拷貝會和淺拷貝一樣&#xff0c;拷貝的是引用&#xff0c;不會創建…

2017 校招華為上機題

1. 給定一個字符串&#xff0c;把字符串內的字母轉換成該字母的下一個字母&#xff0c; a 換成b&#xff0c;z 換成a&#xff0c;Z 換成A&#xff0c;如aBf 轉換成bCg&#xff0c;字符串內的其他字符不改變&#xff0c;給定函數&#xff0c;編寫函數void Stringchang&#xff0…

JSON –拯救杰克遜

有時您必須使用JavaScript從服務器中獲取一些數據&#xff0c; JSON是完成此任務的不錯選擇。 讓我們玩一下JPA揭秘&#xff08;第1集&#xff09;-OneToMany和ManyToOne映射中的“雇主-雇員-福利”示例。 我們將在基于Spring Framework的Web應用程序中使用它。 我們的第一個…