为Java应用程序编写数据驱动的测试
JUnit是一個功能非常強大的測試框架,它不僅為其用戶提供了編寫快速簡便的測試的功能,而且還為用戶提供了擴展它并使其按其期望的方式工作的機會。 在JUnit之上構建了許多框架,這些框架為目標受眾提供了各種易用的功能。
EasyTest是這樣一種框架,其主要重點是將數(shù)據(jù)驅動測試功能引入JUnit世界。
JUnit已經(jīng)有了某種機制,可以為用戶提供某種數(shù)據(jù)驅動的測試感覺。 但是它還不夠,也不干凈。 例如,用戶可以使用@Parameterized Runner編寫數(shù)據(jù)驅動測試,但使用Parameterized Runner會導致編寫許多不必要的代碼。
EasyTest試圖通過彌合JUnit已經(jīng)擁有的與用戶最方便的之間的差距來解決這些問題。
在今天的帖子中,我將簡要介紹一下EasyTest是什么以及它如何從一種業(yè)余愛好演變?yōu)橐粋€成熟的項目,該項目已被許多公司和許多人使用。
入門
為了開始使用EasyTest,您要做的就是下載JAR文件。 您可以通過Maven做到這一點。 這是 Maven上最新的easytest-core JAR 的鏈接 。
下載JAR文件后,就可以編寫第一個數(shù)據(jù)驅動測試了。 這是使用EasyTest Core Module快速啟動和運行的分步指南。
步驟1 :您的pom文件中具有最新的EasyTest依賴項:
<dependency> <groupId>org.easetech</groupId> <artifactId>easytest-core</artifactId> <version>1.3.2</version> </dependency>步驟2 :使用測試方法創(chuàng)建一個簡單的測試類
@RunWith(DataDrivenTestRunner.class)@DataLoader(filePaths = { "testExcelData.xls" })public class TestExcelDataLoader{private ItemService itemService = new RealItemService();@Testpublic void getExcelTestData(@Param(name="libraryId")Float libraryId, @Param(name="itemId")Float itemId) {System.out.print("Executing getExcelTestData :");System.out.println("LibraryId is :" + libraryId + " and Item Id is :" + itemId);}EasyTest庫提供了許多選項,可用于有效執(zhí)行測試。 例如,如果您要并行執(zhí)行測試,則EasyTest提供并行注釋。 查看此博客文章,以詳細了解并行注釋 。
這是另一個利用EasyTest中可用功能的詳細示例:
@RunWith(DataDrivenTestRunner.class)@DataLoader(filePaths = { "testExcelData.xls" })@Format(date='dd/MM/yyyy')@Report@Parallel(threads=5)public class TestExcelDataLoader{@Duration(timeInMillis=1000)private ItemService itemService = new RealItemService();@Testpublic void getExcelTestData(@Param(name="libraryId")Float libraryId, @Param(name="itemId")Float itemId) {System.out.print("Executing getExcelTestData :");System.out.println("LibraryId is :" + libraryId + " and Item Id is :" + itemId);}您可以查看源代碼的javadocs,以了解每種注釋的含義,還可以了解EasyTest中可用的功能。
在每個測試類上編寫帶有如此多注釋的測試類不僅耗時(典型的樣板代碼),而且還會引入難以跟蹤的錯誤。 因此,Easytest為您提供了一次定義和隨處使用功能的能力。 看下面的示例,與上面的示例相同,但更簡潔:
另外,您可以在類級別使用TestPolicy批注將所有批注移動到單獨的可重用測試策略類。 這是一個例子。
@RunWith(DataDrivenTestRunner.class)@TestPolicy(TestExcelDataPolicy.class)public class TestExcelDataLoader{@Duration(timeInMillis=1000)private ItemService itemService = new RealItemService();@Testpublic void getExcelTestData(@Param(name="libraryId")Float libraryId, @Param(name="itemId")Float itemId) {System.out.print("Executing getExcelTestData :");System.out.println("LibraryId is :" + libraryId + " and Item Id is :" + itemId);}在這里,我們沒有定義測試類的幾個注釋,而是定義了一個TestPolicy Annotation ,它從測試類中抽象出了復雜的定義。
這是Policy類TestExcelDataPolicy樣子:
@DataLoader(filePaths = { "org/example/data/testExcelData.xls" })@Format(date='dd/MM/yyyy')@Report@Parallel(threads=5)public class TestExcelDataPolicy {}具有這樣的抽象意味著現(xiàn)在您可以在多個測試中重用您的測試策略類,從而大大減少了樣板代碼。
定義測試類后,下一步就是定義測試數(shù)據(jù)文件。
步驟3 :創(chuàng)建您的測試數(shù)據(jù)文件(對于上面的示例,這將是一個名為testExcelData.xls的Excel文件)
第一行的第一列表示需要為其提供數(shù)據(jù)的測試方法的名稱。 第一行的第二和第三列代表測試輸入?yún)?shù)的名稱。 第2和3行代表實際測試數(shù)據(jù)。
恭喜你 您剛剛編寫了第一個數(shù)據(jù)驅動測試。 當使用Junit支持的IDE運行上述測試時,EasyTest將生成2個測試,每組數(shù)據(jù)一個。 這樣,您就不必編寫用于使用不同參數(shù)進行測試的不同測試。
接下來,讓我們擴展該示例,并嘗試了解EasyTest的一些其他功能 。
了解EasyTest中的IoC容器支持
除了在測試類本身中定義/初始化testSubject(上述測試中的ItemService)之外,您還可以在配置文件中外部化初始化邏輯并在運行時注入正確的實例。 這樣做的好處是,您可以將初始化邏輯與測試邏輯分開,從而使您的測試更簡潔,更可維護。 其次,您也可以在其他測試中重用外部化的邏輯。 讓我們看看如何為上述測試做到這一點。
@RunWith(DataDrivenTestRunner.class)@DataLoader(filePaths = { "testExcelData.xls" })@TestConfigProvider({TestConfigProviderClass.class})public class TestExcelDataLoader{@Injectprivate ItemService itemService;@Testpublic void getExcelTestData(@Param(name="libraryId")Float libraryId, @Param(name="itemId")Float itemId) {System.out.print("Executing getExcelTestData :");System.out.println("LibraryId is :" + libraryId + " and Item Id is :" + itemId);}請注意,我們在上述測試中添加了兩件事:
TestConfigProvider批注采用一組配置提供程序類,從這些類可以加載Bean。 在上面的示例中,TestConfigProviderClass.class將如下所示:
public class TestConfigProviderClass {@TestBean public ItemService itemService(){return new RealItemService();}還要注意,我們使用標準Javax批注@Inject來注入測試Bean。 EASYTEST支持@Inject按類型,注射@Named沿@Inject按名稱注射。 除此之外,EasyTest還支持按字段名稱進行注入。 EASYTEST也有自己的@Provided當用戶沒有或不能使用javax注釋的情況下的注釋。
到此博客帖子結束了。 希望我能給您有趣的EasyTest及其功能介紹。 如果您有任何疑問或疑問或想為該項目做出貢獻,請通過anujkumar@easetech.org與我聯(lián)系。
翻譯自: https://www.javacodegeeks.com/2015/08/writing-data-driven-tests-for-your-java-application.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結
以上是生活随笔為你收集整理的为Java应用程序编写数据驱动的测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三星i85(三星i8552)
- 下一篇: java高效复制文件并移动_Java 7