柚子Nan--回归原点

Everything can be as easy as you like or as complex as you need.
posts - 233, comments - 985, trackbacks - 17, articles - 29
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

关于NUnit的几个简单疑问

Posted on 2004-03-03 16:34 柚子Nan 阅读(1588) 评论(17)  编辑 收藏 网摘 所属分类: [成长经历]

1、TestFixture属性
TestFixture属性表明一个类拥有测试方法,这个属性位于NUnit.Framework命名空间下。
其中,在他的官方文件中有个注释The class must have a default constructor(这个类必须有一个默认的构造函数),但是我发现根本就不需要。就可以通过编译,并测试。

2、既然NUnit是用来做单元测试用的(我没有说错吧), 那么在测试代码中写的捕捉异常机制与在源代码中写的捕捉异常有什么关系?

3、做个简单的调查,本博客上的朋友有没有公司在使用NUnit,使用的程度如何?

Feedback

#1楼    回复  引用    

2004-03-03 16:53 by koffer [未注册用户]
还有一个限制:) 所有的Test方法都不能有参数,而且返回值只能为Void 不知道对以后的测试编码会有什么影响?

#2楼    回复  引用    

2004-03-03 17:04 by dudu [未注册用户]
是的!我也发觉可以不需要构造函数!

#3楼    回复  引用  查看    

2004-03-03 19:06 by Alex      
1.有TestFixture的测试类确实可以不需要构造函数,不知道这个注释是什么意思。 2.据我所知,nUnit是用于“测试驱动”的开发方法的,往往是先写测试用例然后写代码,这些测试代码可以测试原来代码中的异常,用[ExpectedException(typeof(Exception))]捕获异常。 3.正准备在我们的Team里面实施XP(首先在测试,构建方面实施)。单元测试/自动化构建用nUnit+nAnt。 过几天我将把实施的一些过程何感想写在我的Blog里面,欢迎交流。

#4楼    回复  引用    

2004-03-03 21:13 by JGTM'2004 [MVP] [未注册用户]
@各位:偶来解释default constructor这个C#中的基本概念

所谓默认构造器,就是类的一个public且不带任何参数的构造器。然而在你没有给类提供*任何*构造器(带参数或不带参数的都算)的时候,C#编译器会为你自动产生的这么一个默认构造器——反过来讲,如果你提供了任何一个构造器的话,编译器就不会再为你生成这个默认构造器。所以,“The class must have a default constructor”的意思是这个类必须要有一个默认构造器——无论是你提供的还是编译器为你提供的都可以。所以说,你或者不提供也可以,或者自己提供也可以,但是你提供的构造器必须至少有一个是默认构造器,也即public且不带任何参数的构造器。

为了试验,你为[TestFixture]类随便添加一个非默认构造器(或者不是public的,或者加个参数),你就知道我的意思了。

#5楼    回复  引用    

2004-03-03 21:17 by JGTM'2004 [MVP] [未注册用户]
推荐你先读读Test-Driven Development: By Example这本书,把整个过程弄清楚再来实践,这样效果会很好。而且,如果有可能的话,同时实践XP的pair programming(结对编程),这个和TDD是相辅相成、不可割裂的。

慢慢来,有关于这方面的任何疑问也可以同我联系。:)

#6楼    回复  引用  查看    

2004-03-04 09:05 by Meyer      
JGTM的耐心可鉴阿
我觉得如果有这种疑问的话,说明对C#的基本知识认知有遗漏,需要花点时间补习一下。确实工作中有不少人,写过上万行的代码,就是连class 的 构造函数都不理解。

#7楼    回复  引用  查看    

2004-03-04 09:07 by Meyer      
btw JGTM就在实际工作中实践了nunit的单元测试,可以在他的blog上了解到。我很喜欢看他的blog(是不是在给他作广告?:P )

#8楼    回复  引用    

2004-03-04 10:59 by koffer [未注册用户]
感谢JGTM'2004 [MVP] 的耐心指点 Bow! 我要去看看默认构造器的知识了,学习! 同时也感谢Meyer 的提醒! Test-Driven Development: By Example这本书 是不是已经出版了?国内有吗?我在上海,估计英文的有1

#9楼    回复  引用    

2004-03-04 11:10 by koffer [未注册用户]
另外,我觉得The class must have a default constructor完全是由C#自动产生的一个默认构造函数。 如果手工写的话,根本写不进去。 例如,错误如下: [TestFixture] public class myTest { [Test] public myTest() { }//提示[Test]属性只能用于标示方法 } 而且在NUnit中,每个方法返回值只能为Void ,这里就不能满足了。看来确实是内部解决了。

#10楼    回复  引用    

2004-03-04 11:51 by win32c [未注册用户]
属性“attribute”在此声明类型上无效。它只在“type”声明中有效。

属性应用到的声明不是它应用于的。

下面的示例生成 CS0592:

// CS0592.cs
using System;

[AttributeUsage(AttributeTargets.Interface)]
public class MyAttribute : Attribute
{
}

[MyAttribute]
public class A // CS0592, MyAttribute is not valid for a class
{
public static void Main()
{
}
}

#11楼    回复  引用    

2004-03-04 11:53 by win32c [未注册用户]
不是构造函数不能写上去,
而是NUnit的属性标记,标记的类型不能是构造函数!

#12楼    回复  引用    

2004-03-04 12:08 by koffer [未注册用户]
“不是构造函数不能写上去,而是NUnit的属性标记,标记的类型不能是构造函数” 明白了,就是说“在一个带有Test标示的Class中并非每个函数都要用NUnit的属性标记” 比如,构造函数就不用,而且也不能用,还有一些你自己不想让标记的方法!

#13楼    回复  引用    

2004-03-04 22:06 by kknd [未注册用户]
我觉得就算是普通开发,使用NUnit也可以帮助我们提高代码质量。
经常会有这种情况,因为某种需要改动了以前某个方法的代码,这就有可能导致以前正常的功能变得不正常,人工去测试是很浪费时间而且也是很无聊的一件事情,如果使用NUnit的自动测试,就不怕这种修改了。

#14楼    回复  引用    

2004-03-11 21:12 by JGTM'2004 [MVP] [未注册用户]
现在NUnit已经用起来了吧?这里给大家几个小技巧:

1、如果方法的名字是以Test开头的(如Test()、TestXXX()),则不需要打[Test]属性NUnit也会自动识别出来(包括private方法)。

2、除了[Test]之外,还可以在使用[SetUp]/[TearDown]来标记方法。[SetUp]所标记的方法将在测试类(术语叫test fixture class)的每一个测试方法执行之前执行一次;[TearDown]则是在每个测试方法之后执行(也包括出错之后)。这两个方法是可选的,一般用于做一些通用的测试用例准备工作——比如当你发现在几个测试方法中有一些开头、结尾的公共重复代码,则可以refactor到这两个方法中。

3、[FixtureSetUp]/[FixtureTearDown]和前面说的类似,只是对于每个测试类的所有测试而言仅执行一次而已。

有了这几种不同用途的属性,你应该考虑如何合理的组织你的测试名称空间、类和方法了。

#15楼    回复  引用  查看    

2004-03-11 21:26 by koffer      
在用! 1、private 方法的话,会出现黄色的bar,提示:method must be public. 2、[SetUp]可以用一些连接数据库的操作、初始化session等操作。 目前我还是处在看书,慢慢的试探阶段。

#16楼    回复  引用    

2004-03-18 13:05 by JGTM'2004 [MVP] [未注册用户]
@koffer:

没错,private确实不让测试,但是它会被识别为一个测试,而且一测就黄,很烦人——后来才发现原来是因为方法名称用Test开头了。所以测试代码自己用到的private方法一定不要用Test开头就是了——不过这应该是NUnit枚举测试方法的一个bug,既然private方法不让测,就应该在BindingFlag里面去掉Private标志才对。:)

#17楼    回复  引用    

2005-05-22 12:03 by runny [未注册用户]
?1.有没有在VB.net下使用Nunit的朋友.
2.我现在刚刚开始使用Nunit2.2,是不是它不向下兼容.
3.如果是数据库的测试,如何来写测试用例.




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

相关文章:

相关链接: