2013-03-07 37 views
1

我已經使用TDD開發在Python一組類。這些對象包含數據字段,函數和相互鏈接。一切功能都像我想要的那樣工作。如何使用TDD創建現有對象的數據庫表示?

最終,所有這一切都應該被存儲在數據庫中,在一個Django的web應用程序中使用。

我勾畫了一些可能的數據庫架構的持有相同的信息,但我覺得這是一個「突發大飛躍」,相較於開發應用程序的其餘部分的傳統TDD方式。

所以,現在我不知道,這測試我應該寫逼我在數據庫中的這些對象存儲在一步一步的TDD方式?

使這個問題有點更具體的,類目前是這樣的:

class Connector(object): 
    def __init__(self, title = None): 
    self.value = None 
    self.valid = False 
    self.title = title 
    ... 

class Element(object): 
    def __init__(self, title = None): 
    self.title = title 
    self.input_connectors = [] 
    self.output_connectors = [] 
    self.number_of_runs = 0 

    def run(self): 
    ... 
    self.number_of_runs += 1 

class Average(Element): 
    def __init__(self, title = None): 
    super(OpenCVMean, self).__init__(title = title) 
    self.src = Connector("source") 
    self.avg = Connector("average") 
    self.input_connectors.append(self.src) 
    self.output_connectors.append(self.avg) 

    def run(self): 
    super(Average, self).run() 
    self.avg.set_value(numpy.average(self.src.value)) 

我知道一些數據應該在數據庫中,同時處理功能不應該。我認爲應該有一個表格來表示Element的不同「類型/子類」的細節,同時也是一個存儲實際實例的表格。但是,正如我所說的,我不明白如何使用TDD來達到目的。

+0

哦,還有就是在你的例子一個錯字。我認爲你的意思是「超級(平均,自我)」。 – ferrix 2013-03-10 13:46:07

回答

2

首先,問自己,如果你將要測試的代碼或者Django的ORM。大多數情況下,存儲和閱讀都可以。

你將需要測試的驗證數據和未模型字段的任何性質的東西。我認爲你應該通過在數據庫的下一層編寫測試來獲得一個好的模式。

此外,使用South或其他一些移植方法來降低模式更改的成本。這會讓你放心一些。

如果您有幾個級別的測試(例如集成測試),檢查數據庫配置是否完好無損是有意義的。大多數測試不需要擊中數據庫。您可以通過模擬模型或某些數據庫操作(至少save())來完成此操作。說了這麼多,你可以檢查數據庫的寫入和讀取用這個簡單的測試:

def test_db_access(self): 
    input = Element(title = 'foo') 
    input.save() 

    output = Element.objects.get(title='foo') 

    self.assertEquals(input, output) 

嘲諷節省:

def save(obj): 
    obj.id = 1 
+0

感謝指向南方的指針。從閱讀的角度來看,如果我想「逐步」構建數據庫模式,似乎肯定會需要一些東西。 至於最初的問題,我仍然需要一些測試,迫使我使用數據庫。一種可能性我看也許是這樣一個測試: 部件1 =元素(標題= 「嗒嗒」) 在element2 = Element.get(標題= 「嗒嗒」) self.assertEqual(部件1,element2的) 請問這通過測試引入數據庫存儲的好方法? – 2013-03-08 10:15:00

相關問題