junit测试类叫什么名字_使用Junit测试名称
junit測試類叫什么名字
命名測試
當(dāng)我們創(chuàng)建Junit測試時,通常沒有方法名稱的實際使用。 Junit運(yùn)行器使用反射來發(fā)現(xiàn)測試方法,并且從版本4開始,您不再被限制以test開始方法的名稱。 測試方法的名稱用于文檔目的。
人們遵循不同的風(fēng)格。 您可以使用給定的given_Something_when_Something_then_Something樣式命名測試。 其他學(xué)校開始了與世界的方法的名稱should來描述被測對象“應(yīng)該”做的。 我真的不明白為什么這比用test開頭方法的名稱要好得多。 如果所有方法都以相同的前綴開頭,那么這僅僅是噪聲。 這些天來,我傾向于將這些方法命名為關(guān)于SUT功能的簡單陳述。
如何訪問測試名稱?
從技術(shù)上講,只要名稱是唯一的,您就可以自由命名方法。 測試中通常不使用該名稱,并且測試結(jié)果不應(yīng)取決于測試方法的實際名稱。 即使Junit支持一種訪問方法名稱的方法。
如果您有Junit規(guī)則
@Rule public TestName name = new TestName();您可以在測試中引用對象name ,獲得實際方法的名稱為
String testName = name.getMethodName();我們可以用它做什么?
有時,被測單元會創(chuàng)建一些巨大的結(jié)構(gòu),可以序列化為二進(jìn)制或文本文件。 通常的做法是運(yùn)行一次測試,檢查結(jié)果文件,如果可以,則將其保存以供以后比較。 以后的測試執(zhí)行將實際結(jié)果與開發(fā)人員保存并檢查的結(jié)果進(jìn)行比較。
在集成測試的情況下,如果對外部系統(tǒng)進(jìn)行打樁,并且可以從某些本地測試數(shù)據(jù)文件中獲取其響應(yīng),而不用查詢外部服務(wù),則可以使用類似的方案。
在這種情況下,可以使用測試名稱來創(chuàng)建存儲測試數(shù)據(jù)的文件名。 測試的名稱是唯一的,可以輕松地將數(shù)據(jù)與需要它的測試配對。 我在jscglib庫中使用了這種方法。 該庫提供了流利的API以創(chuàng)建Java源代碼。 測試包含一些Java構(gòu)建器模式導(dǎo)演代碼,然后將生成的源代碼保存到文件中或與已存儲的結(jié)果進(jìn)行比較。
要保存文件,使用了aux方法getTargetFileName
private String getTargetFileName() {String testName = name.getMethodName();String fileName = "target/resources/" + testName + ".java";return fileName;}要獲取資源名稱,使用了getResourceName方法:
private String getResourceName() {String testName = name.getMethodName();return testName + ".java";}之后,加載和保存生成的Java代碼變得輕而易舉:
private void saveGeneratedProgram(String actual) throws IOException {File file = new File(getTargetFileName());file.getParentFile().mkdirs();FileOutputStream fos = new FileOutputStream(file);byte[] buf = actual.getBytes("utf-8");fos.write(buf, 0, buf.length);fos.close();}private String loadJavaSource() {try {String fileName = getResourceName();InputStream is = this.getClass().getResourceAsStream(fileName);byte[] buf = new byte[3000];int len = is.read(buf);is.close();return new String(buf, 0, len, "utf-8");} catch (Exception ie) {return null;}}通常,這是我知道的唯一示例,您可以將測試方法的名稱用于除文檔之外的其他名稱。
您不應(yīng)該使用的名稱
用我的語言說:“每個人都擅長某事。 至少表明失敗。” 下面的示例演示了這種失敗。
我已經(jīng)看到了將測試數(shù)據(jù)編碼為測試方法名稱的代碼。 訪問測試方法名稱的方式也很奇怪。 程序員可能不知道有一種支持方法的名稱的方法。 缺乏知識可能阻止了他或她行惡,但這個人是個天才。 測試的測試方法是調(diào)用幫助程序類的靜態(tài)方法。 該靜態(tài)方法引發(fā)異常,它也捕獲了該異常,并查看了堆棧跟蹤以識別調(diào)用方方法的名稱。
在訪問了該名稱之后,該代碼應(yīng)用了正則表達(dá)式以從方法名稱中提取值。
摘要
我不知道Junit開發(fā)人員打算給我們類TestName 。 可能有一些用例需要該功能。 我確信他們沒有提供功能,因為有可能這樣做。 如果您不知道所提供的API有什么用處,則可能不應(yīng)該僅僅因為可以就提供它。 新手程序員會錯誤地使用它而不是好的。
另一方面,如果您在API中看到可以使用的內(nèi)容,則并不意味著您應(yīng)該使用該功能。 您應(yīng)該更好地了解該功能的目的,并相應(yīng)地使用它。
編寫單元測試比命名它們更重要。 只要沒有單元測試,關(guān)于單元測試的命名的辯論就沒有用。
根據(jù)需要編寫單元測試,但不能更多。
翻譯自: https://www.javacodegeeks.com/2015/05/using-junit-test-name.html
junit測試類叫什么名字
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的junit测试类叫什么名字_使用Junit测试名称的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 山西美食有哪些特产(山西6大特色名小吃美
- 下一篇: 什么是通用字符名称?_通用名称