2016-10-10 304 views
0

我有一個jUnit類,它擴展了一個我需要測試的受保護方法的類。現在實例化jUnit測試類

@RunWith(...) 
@Configuration(...) 
public class testA extends A{ 
    @Test 
    public void testProtectedMethod1(){ 
    .. 
    } 
} 

,類A需要一定的變量(DAO)來實例化的同時進行設置。運行此代碼會引發IllegalArgumentException - 必須提供DAO。

事情我已經嘗試:

1)手動設置使用@Before的DAO - 沒有工作

2)指定用於DAO的屬性集測試類豆 - 沒有工作。

如何使用繼承的屬性實例化此jUnit類?

+0

A類如何獲得DAO?它是一個構造函數參數嗎? –

+0

類A擴展了另一個具有此DAO變量的類B.類A沒有構造函數。我們使用p:DAO在類A的bean定義中設置DAO ... – user2780757

+0

爲什麼不將DAO類標記爲Spring bean,並使用'@ Autowired'將它注入到需要的地方? –

回答

0

事實證明,我不能注入任何jUnit測試類的屬性,因爲它的對象是由jUnit運行時本身實例化的。無論如何,我最終使用反射來測試私有方法。

0

您的正在測試的類應該不是您在單元測試類中繼承的類。另外,由於JUnit(甚至Java)的設計方式,測試私有方法本質上很困難(如果不是不可能的話)。

使用單元測試和T-D-D的關鍵在於能夠測試您的課程的公共方法。如果您試圖測試私有方法,您可能首先需要重新考慮您的(功能性)類設計。它是否遵循Single Responsibility Principle

如果您希望對我們只測試公共方法的一般規則做出例外,可能會使您的私有方法受到保護或訪問包(並確保您的測試類與測試中的類具有相同的包名稱)。

無論哪種方式,在JUnit中讓您的測試類從測試中的類繼承是不好的做法,您應該避免這種情況。

+0

事實證明,我不能注入jUnit測試類的任何屬性,因爲它的對象是由jUnit運行時本身實例化的。無論如何,我最終使用反射來測試私有方法。謝謝! – user2780757