如何确定在类中使用的属性或方法

时间:2014-02-07 11:49:31

标签: c# asp.net unit-testing

创建静态类以编写单元测试。我不确定是使用静态属性还是静态方法。

请参阅下面的代码并告诉我。

1)MailParterDummies(具有静态属性的那个)

public static class MailPartnerDummies
{
    public static IEnumerable<MailingPartner> MailingPartners
    {
        get
        {
            int index = 0;
            IList<MailingPartner> mailingPartners = new List<MailingPartner>();
            for (int i = 0; i < _text.Count(); i++)
            {
                var mailingPartner = new MailingPartner();

                index = index > _text.Count() ? 0 : index;

                mailingPartner.MailingPartnerID = i + 1;
                mailingPartner.ContactName = _text[index];
                mailingPartner.OrganisationName = _text[index];
                mailingPartner.FullAddress = _text[index];
                mailingPartner.Town = _text[index];
                mailingPartner.County = _text[index];
                mailingPartner.Country = _text[index];
                mailingPartner.PostalZipCode = _text[index];
                mailingPartner.TelephoneNumber = i + 1;
                mailingPartner.EmailAddress = _text[index];
                mailingPartner.WebsiteAddress = _text[index];
                mailingPartner.AddedOn = DateTime.Now;
                mailingPartner.AddedBy = _text[index];
                mailingPartner.UpdatedOn = DateTime.Now;
                mailingPartner.UpdatedBy = _text[index];

                mailingPartners.Add(mailingPartner);
                index ++;
            }

            return mailingPartners;
        }
    }



    #region fake variables

    private readonly static string[] _text = { "Test1", "Test2", "Test3" };

    #endregion
}

2)MailParterDummies(静态方法)

public static class MailPartnerDummies
{        
    public static IEnumerable<MailingPartner> MailingPartnerList()
    {
        int index = 0;
        IList<MailingPartner> mailingPartners = new List<MailingPartner>();
        for (int i = 0; i < _text.Count(); i++)
        {
            var mailingPartner = new MailingPartner();

            index = index > _text.Count() ? 0 : index;

            mailingPartner.MailingPartnerID = i + 1;
            mailingPartner.ContactName = _text[index];
            mailingPartner.OrganisationName = _text[index];
            mailingPartner.FullAddress = _text[index];
            mailingPartner.Town = _text[index];
            mailingPartner.County = _text[index];
            mailingPartner.Country = _text[index];
            mailingPartner.PostalZipCode = _text[index];
            mailingPartner.TelephoneNumber = i + 1;
            mailingPartner.EmailAddress = _text[index];
            mailingPartner.WebsiteAddress = _text[index];
            mailingPartner.AddedOn = DateTime.Now;
            mailingPartner.AddedBy = _text[index];
            mailingPartner.UpdatedOn = DateTime.Now;
            mailingPartner.UpdatedBy = _text[index];

            mailingPartners.Add(mailingPartner);
            index++;
        }

        return mailingPartners;
    }


    #region fake variables

    private readonly static string[] _text = { "Test1", "Test2", "Test3" };

    #endregion
}

我要用1)还是2)? 感谢。

1 个答案:

答案 0 :(得分:1)

使用方法。

根据微软的Rico Mariani的说法,除了返回请求的值之外,属性不应该做任何其他事情。如果您需要进行任何数据处理,请使用方法。

通过执行此操作,您可以清楚地与调用代码进行通信,并且可以在引擎盖下完成一些工作。

查看Rico的文章:Performance Guidelines for Properties

引用:

  

所以,你正在使用一个属性,最重要的是要记住   它看起来非常像一个领域。它看起来像一个   田野和感觉就像一个领域,人们会期望它表现得像一个   领域。所以记住这一点:

     
      
  • 访问该属性不应分配任何内存;人们会在循环中使用这个东西走过任何数据结构   你正在展示,他们希望这些数据能够存在   被访问。

  •   
  • 访问该属性不应该“同步” - 如果要进行任何锁定,则应该在比单个更高的级别完成   当你获得任何拥有该财产的物品时,该字段   它,读它应该是安全的。

  •   
  • 访问该属性不应该执行任何I / O,尤其是在您阅读该属性时,再次看到上面的任何网络I / O.   提供它的对象应该做任何需要的I / O.

  •   
  • 访问属性不应该是复杂度大于O(1)的操作 - 这意味着没有循环。完全没有。你可以讨价还价   如果我们谈论的是一个属性,那就高达O(lg(N))   “索引器”但不高。   访问该属性不应该有副作用(即它严格地是一个读取操作,它什么都不改变)

  •   
     

你剩下的就是你可以使用你的对象状态和   参数(如果是索引器)进行常量时间查找或日志时间   最糟糕的是,在已有的数据结构中并立即返回   结果。就是这样。