君子难得半日安

代码改变世界

学习silverlight Unit Test

2010-11-26 11:52  半日安  阅读(413)  评论(1)    收藏  举报

      突然间,发现自己没有单元测试的习惯。这样写代码确实有些危险,在网上找了些相关的资料。最后,大部分的信息都导向两个网页。

                1,http://www.jeff.wilcox.name/2008/03/31/silverlight2-unit-testing/

                2,http://msmvps.com/blogs/theproblemsolver/archive/2009/01/26/unit-testing-in-silverlight-part-4-the-ui.aspx 。

      网上有对这两篇文章的翻译,这里不详细说明了。

       一, 先说下环境

             1,vs2008

             2,silverlight 3

             3,FrameWork 3.5

             4,Windows 2003

      二,需要下载的东西。

    1,下载Silverlight Unit Test VS模板以及Silverlight Unit Test Framework Binaries库

            Silverlight Unit Test templates (Zip, 46K)

          Silverlight Unit Test Framework binaries (Zip, 284k)

          Silverlight Unit Test文档 (Zip, 1881K)

    2,解压下载后的Silverlight Unit Test templates包

                 并将里面包含的SilverlightTestProject_CSharp.zip以及SilverlightTestProject_VB.zip文件拷贝到(不要再把上述两个.zip文件解压了,不然VS不认)

                 %userprofile%\Documents\Visual Studio 2008\Templates\ProjectTemplates

                而将SilverlightTestClass_CSharp.zip以及SilverlightTestClass_VB.zip文件拷贝到

               %userprofile%\Documents\Visual Studio 2008\Templates\ItemTemplates

               解压下载下来后的Silverlight Unit Test Framework Binaries,并将里面的东西拷贝到如下目录下:

              C:\Program Files\Microsoft SDKs\Silverlight\v2.0\Libraries\Client

           启动VS2008,如果出现下面所示模板

 

         UnitTest02

          说明我们的VS2008已经配置成功

            已经支持Silverlight Unit Test(配置部分详细看http://www.cnblogs.com/ibillguo/archive/2008/10/27/1320067.html)不好意思贴过来的。

 三,可以开始写silverlight的单元测试的项目了。

         1,新建一个项目silverlightUnit

           

      2,同时,建立test的测试项目 

           

           Silverlight test Project是下载的工程模板。配置方式前面已经介绍。

    3,开始写代码

           3.1  在MainPage.xmal中拖两个控件 代码如下:

                

   代码
<UserControl x:Class="silverlightUnit.MainPage"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d
="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable
="d" d:DesignWidth="640" d:DesignHeight="480">
  
<Grid x:Name="LayoutRoot">
        
<TextBlock x:Name="TbName"  Text="请输入数据" Width="200" Height="30" Margin="0,0,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
        
<Button x:Name="BtTest" Content="测试" Width="100" Height="30" Margin="0,30,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Click="BtTest_Click"/> 
    
</Grid>
</UserControl>


          3.2 在MainPage.xmal.cs的代码

           

代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace silverlightUnit
{
    
public partial class MainPage : UserControl
    {
        
public MainPage()
        {
            InitializeComponent();
        }

        
internal void BtTest_Click(object sender, RoutedEventArgs e)
        {
            TbName.Text 
= "brian";
        }
    }
    
public class article
    {
        
string name;
        
public article(string strn)
        {
            name 
= strn;
        }
        
public string add()
        {
            
return "名字:" + name;
        }
    }
}

    

        3.3 修改项目的属性

         

代码
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// 有关程序集的常规信息通过以下
// 一组属性控制。更改这些属性值可修改
// 与程序集相关的信息。
[assembly: AssemblyTitle("silverlightUnit")]
[assembly: AssemblyDescription(
"")]
[assembly: AssemblyConfiguration(
"")]
[assembly: AssemblyCompany(
"")]
[assembly: AssemblyProduct(
"silverlightUnit")]
[assembly: AssemblyCopyright(
"Copyright ©  2010")]
[assembly: AssemblyTrademark(
"")]
[assembly: AssemblyCulture(
"")]
[assembly:InternalsVisibleTo(
"Test")]

// 将 ComVisible 设置为 false 可使此程序集中的类型
// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
// 请在该类型上将 ComVisible 属性设置为 true。
[assembly: ComVisible(false)]

// 如果此项目向 COM 公开,则以下 GUID 用作类型库的 ID
[assembly: Guid("424622d4-b3c8-4098-9bd4-2611c3674227")]

// 程序集的版本信息由下面四个值组成:
//
//      主版本
//      次版本
//      内部版本号
//      修订号
//
// 您可以指定所有值,也可以使用“*”默认修订号和内部版本号,
// 如下所示:
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion(
"1.0.0.0")]

      注意“[assembly:InternalsVisibleTo("Test")]”这个是手工添加上的,test代表的是你测试项目的名字

      3.4  为test项目修正引用

          

         3.5开始写测试代码

          (我写在了Test.cs文件中了)

           代码如下:

         

代码
using System;
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.Silverlight.Testing;
using silverlightUnit;

namespace Test
{
    [TestClass]
    
public class Test:SilverlightTest
    {
        MainPage page;
        [TestInitialize]
        
public void testInitialize()
        {
            page 
= new MainPage();
            
this.Silverlight.TestSurface.Children.Add(page);
        }
        [TestMethod]
        [Asynchronous]
        
public void TestMethod()
        {
            page.BtTest_Click(
this,null);
            Assert.AreEqual(page.TbName.Text, 
"brian");
        }
    }
    [TestClass]
    
public class articleTest
    {
        article ac;
        [TestInitialize]
        
public articleTest()
        {
            ac 
= new article("brian");
        }
        [TestMethod]
        
public void addTest()
        {
            
string strResult = "名字:" + ac.name;
            Assert.AreEqual(strResult, ac.add());
        }
    }
}

// ---
// For details and tutorials: http://code.msdn.microsoft.com/silverlightut/

     

         3.6 我开始不能用http的方式运行,都是file方式。后来,才发现新增的模版是一个silverlight应用。

         在网下加入这个应用即可, 这个可是我的独家发现。

         

   四,大功告成,亲一个。看看效果。

        

       另外说下,没有  [Asynchronous]界面是不显示在上面的!好了,欢迎同学们批评指正。

                                                                                                                       半日安

                                                                                                                     2010.11.26

                                                                                                         

 


 


 

    

     

     

君子难得半日安