51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2733|回复: 2
打印 上一主题 下一主题

[原创] 请教如何修改VS2008创建的单元测试代码

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-7-9 11:25:24 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
在vs2008中,对着代码,右键点击 创建单元测试,可以自动生成一个对应的测试项目与测试代码!
我想问的是,如果我想修改这段自动生成的测试代码,应该怎么做,或者可不可以指定用什么模板生成这样的测试代码

注:请不要推荐其它工具,如 Nunit之类的,谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

  • TA的每日心情
    奋斗
    2024-11-8 12:09
  • 签到天数: 547 天

    连续签到: 1 天

    [LV.9]测试副司令

    3#
    发表于 2010-7-9 16:54:32 | 只看该作者
    利用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");
            }
        }
    }
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2#
     楼主| 发表于 2010-7-9 14:21:45 | 只看该作者
    自已顶一下
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-17 14:37 , Processed in 0.070746 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表