zoukankan      html  css  js  c++  java
  • 单元测试

    使用VS2013进行C#程序的单元测试

    没有按照预期的那样做出成功的单元测试,磕磕绊绊参照了下面两篇博客大致做出来了,所以很有必要记录一下过程。

    http://www.cnblogs.com/duasonir/p/5299732.html(照着这个我成功的做出了单元测试)

    http://www.cnblogs.com/Look_Sun/p/4514732.html(这个我几乎研究了一天,但是最后还是没有做出来,最后看到上面那位同学的参考的内容和这篇一样,拜读之后也作出了半成品)

    由于程序都是简单加法,而且我自己的思想并没有加入其中,项目名以及有些类名就不做改变了,一些术语不够精确还望指正。

    一、C#控制台程序的单元测试(使用“Unit Test Generator”插件生成单元测试和方法)

    “Unit Test Generator”可以通过VS菜单栏:工具->扩展和更新-->搜索““Unit Test Generator””取得,我的已经下载好了,没有提示下载,安装完成后后需要重启VS。

    安装好之后就可以进行单元测试了,这个单元测试主要参照前者的博客成功做出单元测试。

    1.打开vs2013:文件->新建->项目(单击),然后看到如下界面

    点击确定后如下图:

    2.编写代码,生成一个新的类,编写构造函数 与 add()函数。代码如下:

    复制代码
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace UnitTestDemo
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13         }
    14     }
    15     public class test
    16     {
    17         public test()
    18         {
    19 
    20         }
    21         public int add(int a, int b)
    22         {
    23             return a + b;
    24         }
    25     }
    26 }
    复制代码

    3.在代码空白处右键,点击Unit Test Generator,默认选项确定。

    之后界面如下图所示:

    4.在testTest()函数里编写测试代码,代码如下。

    复制代码
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 using UnitTestDemo;
     7 using Microsoft.VisualStudio.TestTools.UnitTesting;
     8 namespace UnitTestDemo.Tests
     9 {
    10     [TestClass()]
    11     public class testTests
    12     {
    13         [TestMethod()]
    14         public void testTest()
    15         {
    16             int a = 1, b = 2, expect = 3;
    17             test t = new test();
    18             int real = t.add(a, b);
    19 
    20             Assert.AreEqual(real, expect);
    21             //Assert.Fail();
    22         }
    23     }
    24 }
    复制代码

    5.在代码空白处右键,点击 运行测试(T),运行结果将自动弹出,如下图所示:

    打开测试资源管理器:依次点击VS2013的菜单栏:测试-> 窗口->测试资源管理器。

    如果给出的期望值错误的话,测试就不会通过,如下图:

    下面给出一张测试不通过,并且给出实际值与期望值分别是多少的图片。来源:http://www.cnblogs.com/libaoquan/p/5296384.html

    以上为最成功的一次的单元测试,除了测试错误的时候没有提示实际值与期望值。(我尽力了)

    二、C#控制台程序的单元测试(手动编写单元测试类和方法)

    主要参照博客:http://www.cnblogs.com/Look_Sun/p/4514732.html

    1.同上面的  一.1;

    2.在解决方案处右键->添加->新建项目。

    新增一个单元测试项目。取名为UnitTestDemoTest。如下图:

    3.进入控制台项目UnitTestDemo的Program类,创建一个Add方法(目的就是测试这个Add方法运行是否正常,返回结果是否正确)。这里把Add方法写到写到Program类里面了,上面的那个单元测试是生成一个新的类test,编写构造函数 与 add()函数。

    代码如下:

    复制代码
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace UnitTestDemo
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13         }
    14 
    15         public static int Add(int num1, int num2)
    16         {
    17             return num1 + num2;
    18         }
    19     }
    20     
    21 }
    复制代码

    4.在单元测试项目UnitTestDemoTest中引用控制台项目UnitTestDemo(在“引用”处右键“添加引用”),之后界面如下:

    引用完毕后项目结构如下:

    下面就是VS为UnitTest1类默认生成的方法。可以看到UnitTest1具有一个【TestClass】特性,表明这是一个测试类。TestMethod1具有一个【TestMethod】特性,表明这是一个测试方法。

    一个方法必须具有【TestMethod】特性,且其所属的类具有【TestClass】特性,那么这个方法才会被VS承认为一个【单元测试方法】。

    如果没有上面的两个特性中的一个,编译生成是没有任何问题的。但是VS不会把其作为一个【单元测试方法】。

    复制代码
     1 using System;
     2 using Microsoft.VisualStudio.TestTools.UnitTesting;
     3 
     4 namespace UnitTestDemoTest
     5 {
     6     [TestClass]
     7     public class UnitTest1
     8     {
     9         [TestMethod]
    10         public void TestMethod1()
    11         {
    12         }
    13     }
    14 }
    复制代码

    5.截止目前,已经建立了一个可以执行的测试框架,虽然没有起到什么作用,但是测试已经可以执行了(直接点击测试资源管理器里面的全部运行即可)。测试结果如下图:

    6.在单元测试的测试方法里面添加测试函数,代码如下:

    复制代码
     1 using System;
     2 using Microsoft.VisualStudio.TestTools.UnitTesting;
     3 using UnitTestDemo;
     4 
     5 namespace UnitTestDemoTest
     6 {
     7     [TestClass]
     8     public class UnitTest1
     9     {
    10         [TestMethod]
    11         public void TestMethod1()
    12         {
    13             int num1 = 100;
    14             int num2 = 200;
    15 
    16             Assert.AreEqual(Program.Add(num1, num2), 300);
    17         }
    18     }
    19 }
    复制代码

    注意:一定要在函数里面引用需要测试的项目,我就是没有引用才引有错误(对于啥都不懂的我就允许我这不专业的说明吧)。这里引用之后,把Program类的可见性改为internal或者public。

    只在资源管理器里面引用里面添加引用的话会出现下面的错误(我就是被下面的错误整蒙了,没点基础真苦逼,连添加头文件都不造- -!):

    7.代码测试如下图(测试通过和不通过的界面):

    测试不通过时也没有提示期望值和实际值。o(╯□╰)o

    三、其实课上吴小勇同学给我们演示了C++的单元测试。

    http://www.cnblogs.com/xiaoyongwu/p/5289964.html

    一开始我照着吴小勇同学的博客,准备写一个C++的单元测试。一直出现错误后就写了C#的单元测试。

    主要是手忙脚乱之际,度娘让我看到希望了,感觉很详细,就参考着进行单元测试了。

    http://www.cnblogs.com/Look_Sun/p/4514732.html

    后来一直出错,请教了班级助教后已经能测试通过了但还是不知道问题出在哪里,迷茫的时候又发现下面这篇博客,最后才顺利写出这个半成品单元测试。

    http://www.cnblogs.com/duasonir/p/5299732.html

    后期再添加一个C++的单元测试。ing...

  • 相关阅读:
    bzoj:1299: [LLH邀请赛]巧克力棒
    [51nod][cf468D]1558 树中的配对
    HDU5447 Good Numbers
    Timus Online Judge:ural:1006. Square Frames
    poj1830:开关问题
    bzoj:1776: [Usaco2010 Hol]cowpol 奶牛政坛
    bzoj:1725: [Usaco2006 Nov]Corn Fields牧场的安排
    bzoj:1828: [Usaco2010 Mar]balloc 农场分配
    bzoj:1584: [Usaco2009 Mar]Cleaning Up 打扫卫生
    bzoj:1598: [Usaco2008 Mar]牛跑步
  • 原文地址:https://www.cnblogs.com/LoveAndPeace/p/7147559.html
Copyright © 2011-2022 走看看