2015-11-10 52 views
0

我需要爲我的應用程序創建一些單元測試,但我不知道如何繼續,也找不到任何在線幫助。我想知道的是如何測試應用程序,其中有許多方法依賴於其他幾個方法。如何使用依賴關係對單元測試方法進行單元測試

例如

public class foo(){ 

    public void doIt() { 
     boz(); 
     bar(); 
     biz.baz(); //from another class 
    } 

    public void bar(){ 
     ... 
    } 

    public int boz(){ 
     ... 
    } 

} 

所以像上面一個給出的一個場景會認爲既然是要反正失敗,如果事情是錯叫裏面的方法是單元測試doIt方法就足夠了。

雖然,我不確定我們是否可以認爲這是單元測試,因爲它測試的不僅僅是一個實體的功能。另外,如果方法doIt上的測試失敗,那麼將很難確定發生錯誤的位置,特別是在存在多個依賴關係的情況下 - 這是否違背了單元測試的含義?

到目前爲止,我已經想到的唯一方法是,首先測試的依賴關係(即barbozbaz),然後doIt方法來啓動。這樣,如果測試套件沒有錯誤並且失敗意味着在該方法中實現的代碼出現問題,而不是在其依賴關係內,則測試套件獲得doIt

但是,這是正確的做法嗎?

+1

'bar'和'boz'不是依賴項,因爲它們是您正在測試的類的一部分。事實上,'biz'就是依賴。爲了單元測試'foo',你需要使'biz'成爲一個接口而不是具體的實現。這樣你可以在單元測試中提供一個虛擬版本的'biz'。 –

+0

@KaseySpeakman提到'bar'和'boz'不是依賴關係,他們應該面對你的測試。爲什麼不使用已知的框架如JUnit? –

+0

@KaseySpeakman是不是有點太多?改變整個實現和創建接口我不需要爲了單元測試而另外使用它。其他方法怎麼樣?我是否也單獨測試它們?即'boz'和'bar' – Rakim

回答

0

,而不必調用吧),真正實現(和巴茲()測試doIt方法()方法,在的Mockito使用間諜:

Mockito spy documentation

如果巴()真的是無效的,你可以做這樣的事情:

foo f = spy(new foo()); 
doNothing().when(foo).bar(); 

更好的是,如果你能注入你的依賴關係(例如:BIZ)作爲模仿對象,直接測試你的Foo類。

+0

並單獨測試依賴關係?考慮到一種方法可能有很多不同的依賴關係,這可能會使測試套件的大小變得很大!但我會看看mockito。它似乎可能有幫助 – Rakim

+1

是的,你可以單獨測試依賴關係。這是一種非常常見的模式,爲每個類(每次一個類測試一個類)進行單元測試,以及測試一組類的功能/組件/集成測試。 –

相關問題