论坛首页 综合技术论坛

如何在.NET中部署Tester class???

浏览 4799 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-09-12  
在.NET中部署Tester class
    众所周知,JUnit的使用者大多采用两种结构存放编写的测试脚本类

1。与代码类放在一起(此不讨论,任何语言和开发环境适用)

2。放在与开发目录结构平行的测试包内,并使得包名与开发代码包名相同
   优点:分开放置是为了发布方便,也可以使得类文件的组织清晰
   同时,由于使得测试类与被测试类的包名相同,保证了被测试类的default and protected methods都可测试

将同样的想法放入.NET中,.NET引入了程序集的概念(这里假设理解.NET程序集的概念,故不作说明),查看了NUnit的源码,发现所有测试类和被测试类都分开放置在不同的程序集中,Example:

nunit.mocks       // nunit的mock object程序集
nunit.mocks.tests // mock object的测试类程序集

问题:
如此放置时,可见度为internal的被测试对象均无法进行正常测试了,internal在c#中意味着程序集内可见。。。

显然将测试类和被测试类分开放入不同的程序集有很大的好处,但却会导致可见度为internal的被测对象无法再被测试,大家有什么更好的办法,或在.NET中如何更好的部署测试类与被测试类?(当然前提是不要讨论与代码类放在一起了,因为此方案已经被提及了。。。呵呵)
@.@||~
   发表时间:2006-09-12  
条件编译应该可以做到吧
或者attribute不知道行不行
0 请登录后投票
   发表时间:2006-09-12  
Expression 写道

如此放置时,可见度为internal的被测试对象均无法进行正常测试了,internal在c#中意味着程序集内可见。。。


你单元测试的目的是为了什么?我想这要看你怎么来处理internal这个关键字。

我觉得代码要优先考虑怎么叫别人用其来自然和舒服,而internal恰恰相反考虑的是代码怎么不叫人用到。
所以通常我不会去考虑internal,到稳定阶段进行重构的时候用internal来加入一下限制。

感觉m$在c#中折腾的这些新玩意(internal),意义不是很大,倒是叫不少人想来想去的。
例如:在C#2.0中多了个static class,我越来越不懂class这个关键字表示什么意思,说是都有一个母亲object,但是这个东东不能ToString(),你也找不到他的hashcode.
0 请登录后投票
   发表时间:2006-09-13  
microhf 写道
Expression 写道

如此放置时,可见度为internal的被测试对象均无法进行正常测试了,internal在c#中意味着程序集内可见。。。


你单元测试的目的是为了什么?我想这要看你怎么来处理internal这个关键字。

我觉得代码要优先考虑怎么叫别人用其来自然和舒服,而internal恰恰相反考虑的是代码怎么不叫人用到。
所以通常我不会去考虑internal,到稳定阶段进行重构的时候用internal来加入一下限制。

感觉m$在c#中折腾的这些新玩意(internal),意义不是很大,倒是叫不少人想来想去的。
例如:在C#2.0中多了个static class,我越来越不懂class这个关键字表示什么意思,说是都有一个母亲object,但是这个东东不能ToString(),你也找不到他的hashcode.


感谢回复 ,同意代码应该让别人用起来自然和舒服,但我更优先的做法是根本不让人使用,internal in c#和default in java有点类似,代表着某种局部可见性。如果是private,那么除了特殊原因实在没有必要测试(特殊原因?),c#没有default,所以internal成了可测试最小可见度

事实上我觉得如果把程序集也看作一组类型的包装物,那么其和package在概念上还是有相似之处的,所以我优先让她的可见度尽可能的低,我想这不会影响大多数人的使用,如果有必要我可以通过重构开放我的可见度等级,原因是原先没有,而现在放出接口对源程序不会有什么影响,但如果已经放出接口却要限制她就可以对源代码造成麻烦。
@.@||~
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics