silverlight:Silverlight专题(11) - Silverlight的单元测试

  本文举例源代码或素材下载

  问题:  我们编写代码时定会反复调试保证它能够编译通过

  但代码通过编译只是介绍说明了它语法正确

  却无法保证它语义也定正确

  也就是不能轻易承诺这段代码行为定是正确

  而编写单元测试可以验证代码行为而我们期望是否

  而使用单元测试来测试自己代码般是越早越好

  最好是写第行代码时候就已经开始了

  那么Silverlight如何进行单元测试呢?

  环境配置:  非常高兴告诉大家微软给我们提供了单元测试支持

  要进行Silverlight单元测试你需要完成下面两步步骤

  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包

Silverlight专题(11) - Silverlight<img src='/icons/53279de.gif' />单元测试

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

  %userprofile%DocumentsVisual Studio 2008TemplatesProjectTemplates

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

  %userprofile%DocumentsVisual Studio 2008TemplatesItemTemplates

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

  C:Program FilesMicrosoft SDKsSilverlightv2.0LibrariesClient

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

Silverlight专题(11) - Silverlight<img src='/icons/53279de.gif' />单元测试

  介绍说明我们VS2008已经配置成功

  已经支持Silverlight Unit Test

  解决方案:  好下面就让我们来做些单元测试把

  如下图所示创建个Silverlight Test Project如下

Silverlight专题(11) - Silverlight<img src='/icons/53279de.gif' />单元测试

  该工程含有文件有:

Silverlight专题(11) - Silverlight<img src='/icons/53279de.gif' />单元测试

  在这个工程中和普通Silverlight工程有个特别差别地方就是没有任何自定义SilverlightControl控件

  那么这个工程RootVisual到底是什么呢?

  咱们打开App.xaml.cs文件就可以看到如下段代码了:

1private void Application_Startup(object sender, StartupEventArgs e) 
2{ 
3  this.RootVisual = UnitTest.CreateTestPage; 
4}


  其中UnitTest是Microsoft.Silverlight.Testing名字Control控件下个类

  而CreateTestPage思路方法将创建个UIElement如下图所示

Silverlight专题(11) - Silverlight<img src='/icons/53279de.gif' />单元测试

  修改Test.cs为:

1[TestMethod] 
2public void TestMethod 
3{ 
4  Assert.IsTrue(true); 
5}


  运行结果如下:

Silverlight专题(11) - Silverlight<img src='/icons/53279de.gif' />单元测试

  它将告诉你这个断言(Assert是否正确已经操作这个过程花了多少时间)

  你如果将Assert.IsTrue(true)改成Assert.IsTrue(false),将出现如下界面

Silverlight专题(11) - Silverlight<img src='/icons/53279de.gif' />单元测试

  说到这里大家肯定要纳闷我为什么非得用单元测试呢?

  看起来这个没有什么用处啊?

  我讲下如下种情况大家可能就可以知道单元测试多有用了

  设想你今天刚刚完成段代码但是你想测试下他到底工作得对不对

  平时你应该会是去试验每个情况点至每个按钮看看是否工作正常

  这时候你肯定会很郁闷特别是出bug时候

  需要查看每段代码来了解到底是哪里出错

  有时候你还不得不通宵但是有个单元测试

  你可以用少量时间写些单元测试代码来测试下每个变量变化情况

  而且这个工作你可以在快离开公司时候让这个Unit Test运行起来

  第 2天来查看下有几个是绿(也就是按照预期运行)还有那几个是红色(没有按照预期运行)

  这样你可以安心睡觉而且工作效率也高

  空口无凭展示范例如下:

  1.首先在UnitTest4Silverlight工程中添加个叫做SilverlightAppSilverlight Application

  并设置启动工程还是UnitTest4Silverlight工程

  2.修改Page.xamlUI如下代码所示

1<UserControl x:Class="SilverlightApp.Page" 
2  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation%22
3  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml%22
4  Width="400" Height="300"> 
5  <Grid x:Name="LayoutRoot" Background="#3C3C3C"> 
6    <Button x:Name="btn" Content="Unit Test" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20" Padding="20,5" Click="btn_Click"/> 
7  </Grid> 
8</UserControl>


  3.修改Page.xaml.cs代码如下:

1public clickedNum = 0; 
2
3public Page 
4{ 
5  InitializeComponent; 
6} 
7
8public void btn_Click(object sender, RoutedEventArgs e) 
9{ 
10  clickedNum; 
11}


  请暂时性将所有变量以及思路方法设置成public

  重新编译下整个工程

  4.在UnitTest4Silverlight工程中添加对SilverlightApp引用如下

Silverlight专题(11) - Silverlight<img src='/icons/53279de.gif' />单元测试

  5.修改UnitTest4Silverlight工程中Test.cs文件如下:

1using ; 
2using .Collections.Generic; 
3using Microsoft.VisualStudio.TestTools.UnitTesting; 
4using SilverlightApp; 
5
6 UnitTest4Silverlight 
7{ 
8  [TestClass] 
9  public Test 
10  { 
11    private Page page= Page; 
12
13    private void TestClick 
14    { 
15      page.btn_Click(this, null); 
16    } 
17
18    [TestMethod] 
19    public void TestMethod 
20    { 
21      TestClick; 
22      TestClick; 
23      TestClick; 
24      TestClick; 
25      Assert.AreEqual(page.clickedNum, 3); 
26    } 
27  } 
28}


  由于我们已经点击了 4次鼠标(TestClick这个点击)

  clickedNum应该已经增加到了4但是我们断言(Assert)clickedNum=3

  明显有bug所以运行后结果如下:

Silverlight专题(11) - Silverlight<img src='/icons/53279de.gif' />单元测试



  你可以看到期望值应该是4但是我们传给是3明显不对修改这个bug我们将得到如下运行结果

Silverlight专题(11) - Silverlight<img src='/icons/53279de.gif' />单元测试

  当然实际工程中Unit Test不会这么简单

  Unit Test更多功能请参看SDK以及专业软件Software测试书籍

  结语:  本文展示了如何在Silverlight中运用Unit Test来提高工作效率



Tags:  silverlight2 silverlight.2.0 silverlight是什么 silverlight

延伸阅读

最新评论

发表评论