浏览 4799 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-09-12
众所周知,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中如何更好的部署测试类与被测试类?(当然前提是不要讨论与代码类放在一起了,因为此方案已经被提及了。。。呵呵) @.@||~ 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-09-12
条件编译应该可以做到吧
或者attribute不知道行不行 |
|
返回顶楼 | |
发表时间:2006-09-12
Expression 写道 如此放置时,可见度为internal的被测试对象均无法进行正常测试了,internal在c#中意味着程序集内可见。。。 你单元测试的目的是为了什么?我想这要看你怎么来处理internal这个关键字。 我觉得代码要优先考虑怎么叫别人用其来自然和舒服,而internal恰恰相反考虑的是代码怎么不叫人用到。 所以通常我不会去考虑internal,到稳定阶段进行重构的时候用internal来加入一下限制。 感觉m$在c#中折腾的这些新玩意(internal),意义不是很大,倒是叫不少人想来想去的。 例如:在C#2.0中多了个static class,我越来越不懂class这个关键字表示什么意思,说是都有一个母亲object,但是这个东东不能ToString(),你也找不到他的hashcode. |
|
返回顶楼 | |
发表时间: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在概念上还是有相似之处的,所以我优先让她的可见度尽可能的低,我想这不会影响大多数人的使用,如果有必要我可以通过重构开放我的可见度等级,原因是原先没有,而现在放出接口对源程序不会有什么影响,但如果已经放出接口却要限制她就可以对源代码造成麻烦。 @.@||~ |
|
返回顶楼 | |