铱星·江南
桃花坞里桃花庵 桃花庵下桃花仙 桃花仙人种桃树 又摘桃花换酒钱 酒醒只在花前坐 酒醉还来花下眠 半醉半醒日复日 花落花开年复年
posts - 4,  comments - 20,  trackbacks - 9

       昨天晚上刚把自己项目的一个类库写完,松了口气,在做一下Nunit的测试就OK了。
接着就打开CodeSmith,准备用CodeSmith把Nunit单元测试的代码框架用它生成一下。以前草草的写了一个模板,就是把测试工程的类、命名空间和几个方法生成一下。

        刚生成出来,忽然想到我的类里那么多方法,一个一个再写写,太累了(CodeSmith的模板里,我原来的方法名称是填写的),能用反射吗?这样就方便了(没办法,就是懒啊)。马上着手查了查CodeSmith的示例,发现.net的代码可以直接写在里面,试了试,居然也有智能提示,哈哈,太好了

        于是,先写了个函数:

<script runat="template">
 
'获取Methed成员的集合
    Public Function GetMetheds(ByVal strAssembly As StringByVal strType As StringAs System.Reflection.MethodInfo() 
        
Dim SampleAssembly As System.Reflection.Assembly
        SampleAssembly 
= System.Reflection.Assembly.loadfrom(strAssembly & ".dll")
    
        
Dim myType() As Type = SampleAssembly.GetTypes
        
Dim dllType As Type
        
        
For Each dllType In myType
            
If dllType.Name = strType.Trim Then
            
return  dllType.GetMethods
            
End If
        
Next
    
End Function


    
public Function GetDate()as String
        
return datetime.Now.ToString("yyyy-MM-dd")
    
End Function

</script>

 

这样,代码区域就可以用循环生成测试方法了:
注:方法的命名规则是--类的方法名+Test

 

<Dim mi As System.Reflection.MemberInfo %>
<for each mi in GetMetheds(MyAssembly,MyType) %>
        
<Test()> Public Sub <%= mi.Name %>Test()
        
        
End Sub

<Next %>

运行了一下,咦,多了好多方法:Dispose,GetHashCode..........
看来是继承自基类的方法,看来得过滤掉,修改了一下:

<Dim mi As System.Reflection.MemberInfo %>
<dim aMark as string()={"Dispose","GetHashCode","Equals","ToString","GetType"} %>
<for each mi in GetMetheds(MyAssembly,MyType) %>
<If Array.IndexOf(aMark, mi.Name) = -1 Then %>
        
<Test()> Public Sub <%= mi.Name %>Test()
        
        
End Sub

            
    
<End If %>
<Next %>

哈哈,这下生成的就舒服多了。
以下是以Jmail的dll文件中POP3CLASS为例:

Imports NUnit.Framework

Namespace Exing.TestCase
    
''' -----------------------------------------------------------------------------
    ''' Project     : TestCase
    ''' Class     : TestCase.POP3Class
    ''' 
    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' Jmail测试
    ''' </summary>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    '''     [铱星]    2005-09-26    Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    <TestFixture()> Public Class POP3ClassTest
        
<SetUp()> Public Sub init()

        
End Sub


        
<Test()> Public Sub DownloadUnreadMessagesTest()
        
        
End Sub

            
        
<Test()> Public Sub DeleteMessagesTest()
        
        
End Sub

            
        
<Test()> Public Sub GetMessageUIDTest()
        
        
End Sub

            
        
<Test()> Public Sub DownloadMessagesTest()
        
        
End Sub

            
        
<Test()> Public Sub DownloadHeadersTest()
        
        
End Sub

            
        
<Test()> Public Sub DeleteSingleMessageTest()
        
        
End Sub

            
        
<Test()> Public Sub DownloadSingleHeaderTest()
        
        
End Sub

            
        
<Test()> Public Sub GetLastUnreadMessageTest()
        
        
End Sub

            
        
<Test()> Public Sub get_MessagesTest()
        
        
End Sub

            
        
<Test()> Public Sub get_SizeTest()
        
        
End Sub

            
        
<Test()> Public Sub get_CountTest()
        
        
End Sub

            
        
<Test()> Public Sub set_LoggingTest()
        
        
End Sub

            
        
<Test()> Public Sub get_LoggingTest()
        
        
End Sub

            
        
<Test()> Public Sub get_LogTest()
        
        
End Sub

            
        
<Test()> Public Sub DisconnectTest()
        
        
End Sub

            
        
<Test()> Public Sub ConnectTest()
        
        
End Sub

            
        
<Test()> Public Sub CreateObjRefTest()
        
        
End Sub

            
        
<Test()> Public Sub InitializeLifetimeServiceTest()
        
        
End Sub

            
        
<Test()> Public Sub GetLifetimeServiceTest()
        
        
End Sub

            
        
<TearDown()> Public Sub TearDown()
            
        
End Sub

        
        
End Class

End Namespace

 

 

唉,以前怎么没早想到啊,白死了那么多脑细胞..........

 

 

 

 

posted on 2005-09-27 17:33 铱星 阅读(1318) 评论(5)  编辑 收藏 网摘

FeedBack:
2005-09-27 19:59 | csover [未注册用户]
白细胞...呵呵..
  回复  引用    
2005-09-28 08:54 | Daniel      
要是能先写测试该多好啊
  回复  引用  查看    
2005-09-28 08:56 | billy_zh [未注册用户]
TDD思想: 测试先行(先写测试代码,后完成实现)
楼主是测试后行(先写实现代码,后写测试代码), 呵呵.
后写测试代码的问题就是写程序的人测试自己的代码肯定会有一种情绪在里面(认为自己的代码很健全了),当然换个人写就比较好了,
  回复  引用    
#4楼 [楼主]
2005-09-28 09:15 | 铱星      
这个问题我也想过,可以这样实现:在类设计后,构建基本框架,但不用具体实现,然后再写客户端测试代码。我觉得这和TDD的思想应该不矛盾,都是站在使用者即客户端的角度,而不用关心是如何实现的。
  回复  引用  查看    
#5楼 [楼主]
2005-09-28 09:25 | 铱星      
不过这样处理多少会有些干扰,呵呵
还是应该草拟测试代码,然后类设计。不过最终还是要进行单元测试,可以用上述方法来处理。
  回复  引用  查看    




标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2005-09-28 09:21 编辑过
Google站内搜索

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》

相关文章:

相关链接:
 


<2005年9月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

与我联系

搜索

 

常用链接

留言簿(1)

随笔档案(4)

我关注的博客

积分与排名

  • 积分 - 12280
  • 排名 - 3240

最新评论

阅读排行榜

评论排行榜