2017-03-02 55 views
0

想知道如果我這樣做是正確的?TDD和業務規則 - 網絡API 2.0

業務規則

  1. Customer可以在系統中存在W/O Property
  2. 當我們刪除Property時,Customer也被刪除。
  3. 只有時間我添加一個Customer是當我添加一個Property。 (見下文)

的POST:JSON數據從客戶端

// http://localhost:3541/api/property 

{ 
    City: "Demo City", 
    Customer: {Id: 0, Name: "New Customer", Email: "[email protected]"}, 
    Id: 0, 
    Name: "Custom Property Name", 
    State: "LA", 
    StreetAddress1: "123 Main St.", 
    StreetAddress2: "Apt 1", 
    Type: {Id: 15, Name: "Developer"}, 
    UserId: 174, 
    Zip: "12345" 
} 

的控制器

[Route("api/property")] 
[HttpPost] 
public async Task<int> AddProperty(Property property) 
{ 
    return await propertyManager.AddProperty(property); 
} 

屬性管理器類

class PropertyManager{ 
    PropertyManager(){ 
     ... 
    } 
    PropertyManager(PropertyRepo propertyRepo){ 
     ... 
    } 

    public int AddProperty(Property property){ 

     int propId = await _propertyRepo.AddProperty(property); 

     // associate with customer 
     AddCustomer(property.Customer, propId); // here is my question (see below) 
    } 

    // again, here is my question (see below) 
    private int AddCustomer(Customer customer, int propId){ 
     int custId = _propertyRepo.AddCustomer(customer, propId); 
    }  
} 

類財產

class Property{ 
    public int Id {get; set;} 
    public string StreetAddress1 {get; set;} 
    ... 

    public Customer Customer {get; set;} 
} 

在我的單元測試,我測試的業務邏輯的PropertyManager類的,看看我是否能正確添加Property

因此Customer在該過程中創建。這必須在同一時間內完成 - 在同一個POST期間(如上面所描述的JSON)。現在

,我的問題是:

(或者我即將進行的方式是)

我測試的我添加Property能力的業務邏輯。上述規則我永遠不會添加Customer不添加第一個Property。我的單元測試因此是Property centric。

我斷言可以通過Property和我的一天測試添加Customer的能力。

正確?!?

或者你會建議在有一個強大的真實世界的時候重新設計系統來解耦到屬性和客戶這兩個類的耦合,後者不能與前者一起存在。

回答

1

TDD正在測試業務規則,所以說TDD與業務規則有些矛盾。

我的猜測是你擔心在測試中測試多個事物,但是請記住,如果測試中邏輯相似,可以測試多個測試項目。因此,在您的業務規則是客戶的情況下,必須在具有測試的屬性旁邊創建客戶,這是完全正確的。

例如,您可能有類似的這些測試:

  • GivenAPropertyWhenACustomerDoesNotExistThenExceptionThrown

  • GivenAPropertyWhenPropertyValidAndCustomerValidThenPropertySuccessfullyAdded

然後你就斷言在兩個屬性和客戶

0檢查

邊評論

你不必一定重新設計你的代碼,但它似乎有趣,當創建一個屬性,因此,如果一個人有多個屬性,他們會在你的數據庫多次客戶創造的呢?由於我不瞭解您的要求或業務,所以我的看法是正確的,但確實看起來很獨特。

還記得TDD是關於首先編寫測試,如果你已經編寫了你的​​代碼,現在正在編寫測試,這不是TDD。

HTH