【问题标题】:Giving character to your unit tests为您的单元测试赋予个性
【发布时间】:2008-10-02 03:06:40
【问题描述】:

我一直在思考单元测试以及如何提高单元测试的可读性。我想为什么不在单元测试中给类一个字符来阐明它们的作用。

这是我写的一个简单的单元测试:

[TestFixture]
    public class when_dave_transfers_money_from_wamu_account_to_the_woodforest_account 
    {
        [Test]
        public void should_increase_the_amount_in_woodforest_account_when_transaction_successfull()
        {
            Dave dave = new Dave();

            Wamu wamu = new Wamu();
            wamu.Balance = 150; 

            wamu.AddUser(dave);

            Woodforest woodforest = new Woodforest();
            woodforest.AddUser(dave);

            FundTransferService.Transfer(100, wamu, woodforest);

            Assert.AreEqual(wamu.Balance, 50); 
            Assert.AreEqual(woodforest.Balance, 100); 
        }
}

这是 Dave 类:

/// <summary>
    /// This is Dave!
    /// </summary>
    public class Dave : User
    {      
        public Dave()
        {
            FirstName = "Dave";
            LastName = "Allen";            
        }

    }

单元测试名称清楚地服务于目的。但是,也许我想更深入地挖掘并在创建 Dave 时将 Wamu 和 Woodforest 帐户分配给 Dave。问题是它将远离可读性,因为我将不得不使用索引值来引用帐户。

您对提高可读性有何看法?

【问题讨论】:

    标签: c# .net unit-testing


    【解决方案1】:

    测试夹具中的私有辅助方法怎么样

    private Dave GetDave_With_Wamu_And_Woodforest_AccountsHookedUp()
    

    【讨论】:

      【解决方案2】:

      这是另一种运行测试的方法:

       [Test]
              public void should_increase_the_amount_in_woodforest_account_when_transaction_successfull()
              {
                  Dave dave = new Dave();
      
                  // we know that dave has wamu and wooforest accounts 
      
                  dave.WamuAccount("Wamu").Balance = 150;
      
                  FundTransferService.Transfer(100, dave.WamuAccount("Wamu"), dave.WoodforestAccount(
                      "Woodforest"));
      
                  Assert.AreEqual(50, dave.WamuAccount("Wamu").Balance);
                  Assert.AreEqual(100, dave.WoodforestAccount("Woodforest").Balance);             
              }
      

      【讨论】:

        【解决方案3】:

        当 Dave 像这样创建时,我可以将 Dave 添加到 Wamu 和 Woodforest 帐户:

         public Dave()
                {
                    FirstName = "Dave";
                    LastName = "Allen"; 
        
                    // add accounts for Dave 
        
                    Wamu wamu = new Wamu();
                    wamu.AddUser(this);
        
                    Woodforest woodforest = new Woodforest();
                    woodforest.AddUser(this); 
                }
        

        帐户被添加到 Dave 继承的 User 对象中的 List 集合中。

        【讨论】:

        • 在构造函数中会不会太多了?
        • 是的,我就是这么想的!
        【解决方案4】:

        当您尝试实例化 Wamu 实例时,它不应该抛出 WamuNotFoundException 吗?

        【讨论】:

        • 什么!!不知道你的意思!但我的问题不同。
        • 因为华盛顿互惠不再存在了;)
        猜你喜欢
        • 2020-11-11
        • 2010-11-17
        • 1970-01-01
        • 1970-01-01
        • 2018-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多