簡體   English   中英

單元測試數據庫訪問層

[英]Unit testing database access layer

我知道這個問題已經被問過很多次了,但是我有一些具體的代碼示例,我想知道對它們進行單元測試是否有意義:

class FooAPI(object):

    def create(self, prop1, prop2, prop3, prop4, prop5):
        sql = "INSERT INTO foo (prop1, prop2, prop3) VALUES (?, ?, ?)"
        self.connection.execute(sql, (prop1, prop2, prop3))

        foo_id = self.connection.insert_id()

        sql = "INSERT INTO foo_settings (foo_id, prop4, prop5) VALUES (?, ?, ?)"
        self.connection.execute(sql, (foo_id, prop4, prop5))

        return foo_id

    def update(self, foo_id, prop1, prop2, prop3, prop4, prop5):
        "Update code similar to above"

    def delete(self, foo_id):
        sql = "DELETE FROM foo WHERE foo_id = ?"
        self.connection.execute(sql, (foo_id,))

    def find(self, foo_id=None, prop1=None):
        "Find objects by ID or by prop1"

對上述代碼進行單元測試是否有意義,以及如何進行此測試。 這里有兩個復雜的因素:

  • 數據庫本身並不簡單,我目前沒有簡單的方法來創建包含所有測試數據的數據庫
  • 模式在不斷發展,這意味着不可能一勞永逸地創建測試數據庫。

根據您詢問的人,測試代碼總是有意義的。 也就是說,您在這里所做的工作非常簡單,可能不需要測試。 但是,我認為即使建立測試數據庫很困難,您仍然很可能以后需要它,因此,當您不打算做復雜的事情時,最好現在就做。 此外,還發現該模式正在發展。 隨着時間的推移,數據庫將發生重大變化幾乎是不可避免的,而您只需要順其自然即可。

我能想到不進行測試的唯一好理由是,如果您希望很快就完全更改數據庫。

單元測試(即沒有數據庫),而不是IMO。 一般來說,集成測試我認為這是一個好主意。

數據庫本身並不簡單,我目前沒有簡單的方法來創建包含所有測試數據的數據庫

您如何維護架構? 您需要正確執行此操作,然后再繼續。 您是否可以在一個自動化步驟中將空白數據庫從至少一個包含架構的數據庫遷移到另一個數據庫? 我猜不是,如果您沒有一個使數據庫保持最新狀態的好的系統,那么Liquibase可以為您提供幫助。

現在,測試數據-將所需數據保持較小。

暫無
暫無

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

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