junit junit_使用junit做其他事情
junit junit
junit!=單元測(cè)試
Junit是Java單元測(cè)試框架。 通常,我們將它用于單元測(cè)試,但是很多時(shí)候我們也使用它來(lái)執(zhí)行集成測(cè)試。 主要區(qū)別在于,單元測(cè)試測(cè)試單個(gè)單元,而集成測(cè)試則測(cè)試不同類如何協(xié)同工作。 這樣,集成測(cè)試可以覆蓋更長(zhǎng)的執(zhí)行鏈。 這意味著與單元測(cè)試相比,它們可能發(fā)現(xiàn)更多的錯(cuò)誤,但同時(shí)它們通常運(yùn)行更長(zhǎng)的時(shí)間,并且如果測(cè)試失敗,則更難找到錯(cuò)誤。 如果您(作為開發(fā)人員)知道這些差異,那么使用junit執(zhí)行非單元測(cè)試就沒(méi)有錯(cuò)。
當(dāng)使用junit框架執(zhí)行系統(tǒng)測(cè)試時(shí),我已經(jīng)在生產(chǎn)代碼中看到了示例,其中測(cè)試的執(zhí)行鏈包括通過(guò)網(wǎng)絡(luò)進(jìn)行的外部服務(wù)調(diào)用。 Junit只是一種工具,因此,即使您知道其缺點(diǎn),也沒(méi)有本質(zhì)上的問(wèn)題。 但是,在實(shí)際情況下,junit測(cè)試的執(zhí)行是在正常的maven測(cè)試階段執(zhí)行的,并且一旦外部服務(wù)中斷,代碼就無(wú)法構(gòu)建。 這很不好,因?yàn)榍宄乇砻鏖_發(fā)人員在創(chuàng)建代碼時(shí)并未意識(shí)到包括外部服務(wù)和構(gòu)建過(guò)程在內(nèi)的全局情況。
說(shuō)完這些之后,讓我告訴您一個(gè)不同的故事,稍后再加入這兩個(gè)主題。
我們說(shuō)語(yǔ)言...很多
大多數(shù)時(shí)候,我們的程序都有用戶界面。 該界面包含文本,通常使用不同的語(yǔ)言。 通常以代碼所針對(duì)的英語(yǔ)和當(dāng)?shù)卣Z(yǔ)言。 文本文字通常是外部化的,存儲(chǔ)在“屬性”文件中。 對(duì)于多種語(yǔ)言,我們?yōu)槊糠N語(yǔ)言都有單獨(dú)的屬性文件,每種屬性文件都為id定義文字文本。
例如我們有文件
messages-de.properties messages-fr.properties messages-en.properties messages-pl.properties messages.properties在Java代碼中,我們通過(guò)Spring MessageSource調(diào)用來(lái)訪問(wèn)它們
String label = messageSource.getMessage("my.label.name",null,"label",locale);我們,程序員有點(diǎn)懶
當(dāng)我們沒(méi)有一些文本翻譯時(shí),問(wèn)題就來(lái)了。 用不同語(yǔ)言指定標(biāo)簽實(shí)際文本的工作不屬于程序員。 程序員是精通Java,C和其他編程語(yǔ)言的人,但是在涉及自然語(yǔ)言時(shí)并沒(méi)有真正的光輝。 我們大多數(shù)人不會(huì)說(shuō)所有需要的語(yǔ)言。 有人負(fù)責(zé)翻譯文本。 通常,不同的人使用不同的語(yǔ)言。 其中一些工作速度更快,另一些工作速度較慢,編碼只是等不及翻譯準(zhǔn)備就緒。 在最終翻譯可用之前,我們使用臨時(shí)字符串。
所有臨時(shí)解決方案都將成為最終解決方案。
臨時(shí)字符串(只是英文版)已包含在發(fā)行版中。
流程和紀(jì)律:失敗
為避免這種情況,我們實(shí)施了一個(gè)流程。 我們?yōu)槊糠N翻譯打開了一個(gè)Jira問(wèn)題。 當(dāng)翻譯準(zhǔn)備就緒時(shí),它就附屬于該問(wèn)題。 當(dāng)將其編輯到屬性文件中并提交到git時(shí),問(wèn)題已關(guān)閉。 如此沉重的負(fù)擔(dān)和開銷,使程序員為此放慢了速度,而紀(jì)律不明的程序員只是沒(méi)有遵循該過(guò)程。 通常這是一個(gè)壞主意。
我們得出的結(jié)論是,不轉(zhuǎn)換為屬性文件并不是真正的大問(wèn)題。 問(wèn)題是不知道它丟失并創(chuàng)建發(fā)行版。 因此,我們需要一個(gè)過(guò)程在發(fā)布之前檢查屬性文件的正確性。
光路過(guò)程與控制
手動(dòng)檢查會(huì)很麻煩。 我們創(chuàng)建了junit測(cè)試,該測(cè)試比較了不同的語(yǔ)言文件,并檢查了另一個(gè)語(yǔ)言文件中是否沒(méi)有鍵,并且這些值與默認(rèn)的英語(yǔ)版本不相同。 每次發(fā)布項(xiàng)目時(shí)都要執(zhí)行junit測(cè)試。 然后我們意識(shí)到其中一些值確實(shí)與英文版本相同,因此我們開始在語(yǔ)言文件的第一個(gè)位置使用字母“ X”來(lái)表示正在等待真正翻譯價(jià)值替換的標(biāo)簽。 此時(shí)有人建議將junit測(cè)試替換為簡(jiǎn)單的“ grep”。 幾乎是事實(shí),只是我們?nèi)匀幌Ml(fā)現(xiàn)丟失的鍵并在發(fā)布過(guò)程中自動(dòng)測(cè)試運(yùn)行。
摘要和總結(jié)
Junit框架旨在執(zhí)行單元測(cè)試,但是這些框架不僅可以用于其設(shè)計(jì)目的,而且可以而且將被使用。 (附帶說(shuō)明:對(duì)于任何工具,實(shí)際上都是正確的,無(wú)論是像錘子一樣簡(jiǎn)單,還是像Java接口中的默認(rèn)方法一樣復(fù)雜。)
您可以使用junit執(zhí)行可以在構(gòu)建和/或發(fā)布的測(cè)試階段執(zhí)行的任務(wù)。
- 任務(wù)應(yīng)該快速執(zhí)行,因?yàn)閳?zhí)行時(shí)間會(huì)增加構(gòu)建/發(fā)布周期。
- 不應(yīng)依賴外部資源,尤其是通過(guò)網(wǎng)絡(luò)可訪問(wèn)的外部資源,
因?yàn)檫@些故障可能還會(huì)導(dǎo)致構(gòu)建過(guò)程失敗。 - 如果某些內(nèi)容對(duì)于構(gòu)建不可接受,請(qǐng)使用junit api發(fā)出失敗信號(hào)。 不要只寫警告。 沒(méi)有人閱讀警告。
翻譯自: https://www.javacodegeeks.com/2015/02/using-junit-something-else.html
junit junit
總結(jié)
以上是生活随笔為你收集整理的junit junit_使用junit做其他事情的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: jdk8分组统计字段和_JDK 8流和分
- 下一篇: 在邮件标头中找到无效的字符_在实践中重试