[英]Code reusability in Junit Test cases
public abstract class BaseTest {
protected static HiveTable hiveTable1 = null;
protected static HiveTable hiveTable2 = null;
@Test
public void testHiveMetadata() throws DataConnectorException {
Assert.assertFalse(hiveTable1.exists());
hiveTable1.create();
Assert.assertTrue(hiveTable1.exists());
putRecords(hiveTable1);
Assert.assertEquals(3, hiveTable1.getRecordCount());
Assert.assertFalse(hiveTable2.exists());
hiveTable2.create();
Assert.assertTrue(hiveTable2.exists());
Assert.assertEquals(0, hiveTable2.getRecordCount());
//more code
}
}
public class SomeTest1 extends BaseTest {
@BeforeClass
public static void setUpBeforeClass() throws DataConnectorException {
hiveTable1 = HiveDatasources.getLocalHiveTable1();
hiveTable2 = HiveDatasources.getLocalHiveTable2();
}
}
基本上, abstract
類BaseTest
具有核心測試邏輯,而SomeTest1
等其他類正在填充abstract
類中所需的對象。
有SomeTest2
、 SomeTest3
和一些其他類,它們使用不同類型的 hiveTable 對象(如具有不同文件格式的 hive 表)進行測試。
根據我的理解,當我mvn clean install
我的項目時,只會運行具體類的測試用例。
這是解決問題的正確方法嗎?
我的建議是相當不同的:考慮在這里使用繼承要非常小心,以避免代碼重復。
您看,單元測試的要點是:它們應該幫助您快速確定生產代碼中錯誤的根本原因( 在此處收聽有關該主題的一些想法)。
這意味着:單元測試的核心質量是您盡可能快地從失敗消息到問題的核心。 任何額外的抽象層......都會減慢你的速度。 意思是:在您的設置中,當測試失敗時,您必須了解
也許在創建此代碼后的前兩周這不是問題。 但是兩年后,當你的團隊中有新人時會發生什么? 你出去了; 然后其中一項測試失敗了?!
我的想法是:不要使用繼承,而是使用組合。 含義:創建一個提供“測試助手”方法的助手類; 然后允許一些代碼重復,並按順序為所有SomeTest 類提供字段和測試方法來完成測試工作。
最后,你絕對應該改變的一件事是:你的一個測試方法中有多個斷言。 最好推出並進行多項測試,每項測試最多執行一次斷言。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.