51Testing软件测试论坛

标题: 请教如何修改VS2008创建的单元测试代码 [打印本页]

作者: adtf_liu    时间: 2010-7-9 11:25
标题: 请教如何修改VS2008创建的单元测试代码
在vs2008中,对着代码,右键点击 创建单元测试,可以自动生成一个对应的测试项目与测试代码!
我想问的是,如果我想修改这段自动生成的测试代码,应该怎么做,或者可不可以指定用什么模板生成这样的测试代码

注:请不要推荐其它工具,如 Nunit之类的,谢谢!
作者: adtf_liu    时间: 2010-7-9 14:21
自已顶一下
作者: 楠族开心果    时间: 2010-7-9 16:54
利用Visual Studio 2008来进行单元测试

  假设我们有一个类BankAccount,该类定义了一个银行的账户,私有属性_currentBalance是银行储户的账户金额,depositMoney是存款方法,对帐户增加一笔资金,makePayment是支付方法,对账户减少一笔资金。代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BankAccountDemo.Business
...{
    class BankAccount
    ...{
        private float _currentBalance;
   public float CurrentBalance
        ...{
            get ...{ return _currentBalance; }
            set ...{ _currentBalance = value; }
        }
        public BankAccount(float initialBalance)
        ...{
            this._currentBalance = initialBalance;
        }
        public void depositMoney(float depositAmount)
        ...{
            this._currentBalance += depositAmount;
        }
        public void makePayment(float paymentAmount)
        ...{
            this._currentBalance -= paymentAmount;
        }
    }
}
  要对BankAccount类进行单元测试,只需要在BankAccount的定义处鼠标右键,在菜单中选择“Create Unit Tests”即可进入测试项目的创建工作。
  

  在弹出的创建单元测试的对话框中,对需要创建测试的方法和属性进行选择,然后点击“OK”按钮,如图所示:

  紧接着在出现的文本框中输入测试项目的名称“BankAccountDemo.Business.Tests”,点击确定后,测试项目被创建。在这里“BankAccountDemo.Business.”只是用于更好的对命名空间进行规划,完全可以直接使用“BankAccountDemoTest”来作为测试项目的名字。

  生成的测试代码如下,为了紧凑的表现代码,将注释代码作了删除。

  这个时候的代码并不能开始测试,而需要我们按照测试用例的要求将测试用例的数据加入到测试方法中,并进行结果的比较,修改后的depositMoneyTest方法如下:

[TestMethod()]
public void depositMoneyTest()
{
    float initialBalance = 0F; // TODO: Initialize to an appropriate value
    BankAccount target = new BankAccount(initialBalance); // TODO: Initialize to an appropriate value
    float depositAmount = 100F; // TODO: Initialize to an appropriate value
    target.depositMoney(depositAmount);
    Assert.AreEqual(initialBalance + depositAmount, target.CurrentBalance, "Deposit Test: Deposit not applied correctly");
}
  鼠标右键在depositMoneyTest方法内任意位置单击,在弹出的菜单中选择“Run Tests”,即可以对该方法进行测试。在“Test Results”窗口中显示测试的结果 

  可以看出,Visual Studio 2008给我们提供了一个功能强大,操作简单的单元测试功能。利用该功能,程序员在编写代码后,可以马上对所编写的类进行单元测试,通过了程序员自行组织的单元测试后再将代码交给测试人员进行进一步测试。

  总结:微软将单元测试功能从Visual Studio 2005 Team System开始集成到开发环境中,是经过了微软公司多年的实践经验证明的。如今,开发环境从以前的单一开发功能,将关注点分散到软件的整个生命周期过程中来,已经成为一个ALM平台。软件开发人员不仅需要做开发工作,而且需要对自己开发的代码进行单元测试,不能将所有的问题全部抛给测试人员。测试人员可以将更多的精力放在系统一级的测试工作上面。

using BankAccountDemo.Business;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace BankAccountDemo.Business.Tests
...{
    [TestClass()]
    public class BankAccountTest
    ...{
        private TestContext testContextInstance;
        public TestContext TestContext
        ...{
            get
            ...{
                return testContextInstance;
            }
            set
            ...{
                testContextInstance = value;
            }
        }
        Additional test attributes#region Additional test attributes
        #endregion
        [TestMethod()]
        public void CurrentBalanceTest()
        ...{
            float initialBalance = 0F; // TODO: Initialize to an appropriate value
            BankAccount target = new BankAccount(initialBalance); // TODO: Initialize to an appropriate value
            float expected = 0F; // TODO: Initialize to an appropriate value
            float actual;
            target.CurrentBalance = expected;
            actual = target.CurrentBalance;
            Assert.AreEqual(expected, actual);
            Assert.Inconclusive("Verify the correctness of this test method.");
        }
        [TestMethod()]
        public void makePaymentTest()
        ...{
            float initialBalance = 0F; // TODO: Initialize to an appropriate value
            BankAccount target = new BankAccount(initialBalance); // TODO: Initialize to an appropriate value
            float paymentAmount = 0F; // TODO: Initialize to an appropriate value
            target.makePayment(paymentAmount);
            Assert.Inconclusive("A method that does not return a value cannot be verified.");
        }
        [TestMethod()]
        public void depositMoneyTest()
        ...{
            float initialBalance = 0F; // TODO: Initialize to an appropriate value
            BankAccount target = new BankAccount(initialBalance); // TODO: Initialize to an appropriate value
            float depositAmount = 0F; // TODO: Initialize to an appropriate value
            target.depositMoney(depositAmount);
            Assert.Inconclusive("A method that does not return a value cannot be verified.");
        }
[TestMethod()]
        public void BankAccountConstructorTest()
        ...{
            float initialBalance = 0F; // TODO: Initialize to an appropriate value
            BankAccount target = new BankAccount(initialBalance);
            Assert.Inconclusive("TODO: Implement code to verify target");
        }
    }
}




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2