簡體   English   中英

單元測試數據庫交互器

[英]Unit testing database interactors

我有一個數據庫交互組件,除其他外,它具有Writer和Reader類。 writer類具有write方法,例如insertEntity(Entity)和updateEntity(Entity),而Reader類具有諸如getEntityById(EntityId)的方法。

為了實現此組件,我不確定要如何管理它,但還是想像平常一樣使用TDD。 如果我從實現Writer開始,如果還沒有Reader方法,我將如何做有意義的斷言。 即使我有Reader方法,我也最好不要在Writer的測試中使用它們,盡管這也許是一廂情願的想法。

測試這種代碼本質上是一件痛苦的事情,因為需要設置和拆除表。 但是,由於我之前從未嘗試過對此類代碼進行TDD,所以我可能會錯過使它相對輕松的竅門。 對此的任何指示都值得贊賞。

只要有了適當的抽象,就不需要數據庫。

例如,如果我使方法getEntityById ,我可以有一個將在內存中使用的類(數組,哈希等)。 雖然我的生產代碼將使用具體實例。 用偽代碼:

class MemoryStore
{
    getEntityById(id)
    {
       // Return hardcoded response or canned results
    }
}

class DatabaseStore
{
    getEntityById
    {
        // Go off to the real database and do reads.
    }
}

然后,您可以編寫測試,而無需訪問實際數據庫。 請記住,如果您確實使用了第三方服務,API,數據庫,文件系統等,則不是單元測試。

這里的另一個好處是,您可以在開發應用程序其余部分的同時,讓另一個開發人員來處理數據庫訪問代碼。 所有這些都依賴於“編碼到接口”。

如果要測試數據庫訪問代碼怎么辦? 好吧,您需要集成測試。 這里將使用真實的數據庫,您可以實例化對數據庫進行讀/寫的代碼。 自然,這將很慢並且需要種子數據。 關鍵是您要獨立測試這些應用程序,其余的應用程序將使用內存中的偽造品。 因此,在上面的示例中,只要DatabaseStore工作,我們就可以相信其余代碼可以正確執行操作。

through my DAO's READ methods. 我要做的是先實現我的CREATE方法,然后通過直接查詢數據庫而通過DAO的READ方法來測試它們。 通過這些測試后,您可以使用CREATE方法編寫READ測試,以用測試數據填充數據庫,然后實現READ方法。

至於在每次測試后建立和拆除數據庫,請將SQL做到這一點在您的建立和拆除方法中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM