2015-01-07 58 views
0

我最近進入了使用jMock進行嘲笑的世界 - 尤其是對數據庫的嘲諷。我讀過一些關於如何不可能(輕易)模擬包含在類/方法中的本地對象的文章。由於我從未真正做過任何適當的TDD /模擬,我總是在適當的時候在我的方法中定義了諸如'ResulSet'之類的對象。因此,我的問題是,當我繼續使用未來的DB類/方法時,是否應該將ResultSet定義爲字段,然後使用適當的Setter方法作爲訪問它進行測試的手段?本地對象對Mocking的影響

如果我應該,這是否仍然是合理的考慮我可能不會使用此setter方法除了測試之外的其他任何東西?

本質上,我是否用setter方法定義所有對象來幫助嘲笑?

我看到這篇文章:Mocking methods of local scope objects with Mockito它似乎表明我上面說的是可以接受的。

我知道這似乎是一個基本問題,但我不想在早期形成壞習慣。

回答

3

您在帖子中提到的內容並不是一個好方法。我建議開始你的TDD冒險而不要嘲笑。從測試優先的方法開始,你將最終得到設計,而不需要這種可怕的測試(例如部分模擬)。然後開始嘲笑,但請記住:只嘲笑你擁有的東西(所以如果ResultSet是一個JDBC類,你絕對不應該嘲笑它)。

1

你不應該嘲笑那個級別。基本上,這個想法是,你有接口,作爲數據庫和ORM操作的門面。

interface IFetchUsers { 
    UserList GetAll(); 
    User GetById(int id); 
} 
interface ICalculateDebt { 
    float GetDebt(int accountId); 
} 
interface IPersistOrder { 
    void Save(Order order); 
} 

(原諒語法錯誤,這是一個很長的時間,因爲我做的Java。)

這些都是通過構造方法注入到你的其他類,併成爲微不足道的mock, or even stub

然後,對於實際的db代碼,您只需實現這些接口。你甚至可以把所有的實現放在一個類中。

就是這樣。不需要花哨,但是如果你想進入這個設計模式的更漂亮的版本(儘管我會爭辯說,如果使用一個好的ORM,它並不是真的需要)。

相關問題