Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TDD和业务规则-Web API 2.0_C#_Asp.net Web Api2_Tdd_Inversion Of Control - Fatal编程技术网

C# TDD和业务规则-Web API 2.0

C# TDD和业务规则-Web API 2.0,c#,asp.net-web-api2,tdd,inversion-of-control,C#,Asp.net Web Api2,Tdd,Inversion Of Control,不知道我做得对不对 业务规则 客户可以不存在于系统中,而不具有属性 当我们删除属性时,客户也会被删除 我添加客户的唯一时间是在添加属性时。(见下文) 帖子:来自客户端的JSON数据 控制器 财产类别 在我的单元测试中,我正在测试PropertyManager类的业务逻辑,以查看是否可以正确添加属性 因此,在流程中创建了一个客户。这必须在同一时间完成——在同一篇文章中(如上面的JSON所述) 现在,我的问题是: (或者我将继续的方式是) 我正在测试添加属性的能力的业务逻辑。上述规则规定,我不会在第

不知道我做得对不对

业务规则

  • 客户
    可以存在于系统中,而不具有
    属性
  • 当我们删除
    属性
    时,
    客户
    也会被删除
  • 我添加
    客户的唯一时间是在添加
    属性时。(见下文)
  • 帖子:来自客户端的JSON数据

    控制器

    财产类别

    在我的单元测试中,我正在测试
    PropertyManager
    类的业务逻辑,以查看是否可以正确添加
    属性

    因此,在流程中创建了一个
    客户
    。这必须在同一时间完成——在同一篇文章中(如上面的JSON所述)

    现在,我的问题是:

    (或者我将继续的方式是)

    我正在测试添加
    属性的能力的业务逻辑。上述规则规定,我不会在第一次添加
    属性的情况下添加
    客户
    。因此,我的单元测试以属性为中心

    我认为可以通过
    属性和“我的一天”测试添加
    客户的能力

    对吗


    或者,您是否建议重新设计系统,使其与财产和客户解耦?当这两个类在现实世界中存在强耦合时,后者不能与前者共存

    TDD是关于测试业务规则的,所以说TDD和业务规则有些矛盾

    我的猜测是,您担心在测试中测试多个东西,但请记住,如果逻辑相似,您可以在测试中测试多个东西。因此,在您的实例中,如果业务规则是客户,则必须在具有测试的属性旁边创建,这是完全正确的

    例如,您可能有与以下类似的测试:

    • 如果拥有的财产不属于例外Rown

    • 已成功添加已验证且客户已验证的房地产

    然后,您的断言将在属性和客户之间进行检查

    旁白

    您不必重新设计代码,但在创建属性时创建客户似乎很有趣,所以如果一个人有多个属性,他们会多次出现在您的数据库中?由于我不知道您的要求或业务,这可能是正确的,但似乎是独特的

    还要记住,TDD是关于首先编写测试的,如果您已经编写了代码,现在正在编写测试,那么这不是TDD

    // http://localhost:3541/api/property
    
    {
        City: "Demo City",
        Customer: {Id: 0, Name: "New Customer", Email: "customer@customer.com"},
        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;}
    }