新足迹

 找回密码
 注册

精华好帖回顾

· 飞龙暴走大洋路 (连载) (2004-12-19) 飞龙 · 烟囱戚风模VS普通圆模 - 咖啡戚风蛋糕X2 全程直播 (2011-6-2) 莎莎
· 这种煎熬还要多久?买房路上(3月6号拍卖成功,P3附买房流水账) (2010-2-27) 墨香墨色 · 我家室外改造记(2)-前花园-Fence完工图36-38楼,前院小路尚未完工(更新) (2008-1-21) 淘淘
Advertisement
Advertisement
查看: 1933|回复: 25

asp.net webform unit testing [复制链接]

发表于 2011-2-5 21:59 |显示全部楼层
此文章由 uowzd01 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 uowzd01 所有!转贴必须注明作者、出处和本声明,并保持内容完整
其实是道面试题,给了个asp.net的application,要写unit test

我现在暂且不管那些web control, button click之类的test。尽量把逻辑都refactor到了app_code这个目录下,然后引用nunit.framework,写了一个test class,问题是在这个web application project里面,nunit根本用不起来。

一般的nunit test都是新建一个test project,测试business logic project。目前的asp.net web application,我也可以新建一个project来测试app_code里面的code吗?

不能用ms test,也不能用mvc,还望各位大侠不吝赐教,小弟分分献上,谢过了

[ 本帖最后由 uowzd01 于 2011-2-5 22:01 编辑 ]
Advertisement
Advertisement

发表于 2011-2-5 22:28 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
用mice右击你的website,然后publish web site,然后到你指定的website下面有precompiled/app_code的fold中找dll.建一个lib project,加上对nunit framework 和你那个web site的reference,就已可以做正常的nunit test了。

评分

参与人数 2积分 +7 收起 理由
澳贼 + 4 谢谢奉献
uowzd01 + 3 你太有才了,这么晚了还不睡

查看全部评分

发表于 2011-2-5 23:56 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
瞎转+调东西呢, good luck with your interview!!

发表于 2011-2-5 23:57 |显示全部楼层
此文章由 uowzd01 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 uowzd01 所有!转贴必须注明作者、出处和本声明,并保持内容完整
再次跪谢啊,有老大你一半的功力就可以随便挑啦

发表于 2011-2-6 00:02 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 uowzd01 于 2011-2-5 23:57 发表
再次跪谢啊,有老大你一半的功力就可以随便挑啦


慢慢来,咱们多互相取长补短把,咱谁都没牛到随便挑工作的地步

评分

参与人数 1积分 +3 收起 理由
uowzd01 + 3 谢谢奉献

查看全部评分

发表于 2011-2-6 00:22 |显示全部楼层
此文章由 uowzd01 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 uowzd01 所有!转贴必须注明作者、出处和本声明,并保持内容完整
刚才试了一下,可以了,我一开始是想总不至于把app_code目录下的代码复制一遍。忘记了还可以precompile

这样应该算是解决了asp.net unit testing的问题了,不知道入不入招人公司的法眼,做对了才有面试的机会。

至于那些button click, gridview binding应该就不用测了吧?
Advertisement
Advertisement

发表于 2011-2-6 00:30 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 uowzd01 于 2011-2-6 00:22 发表
刚才试了一下,可以了,我一开始是想总不至于把app_code目录下的代码复制一遍。忘记了还可以precompile

这样应该算是解决了asp.net unit testing的问题了,不知道入不入招人公司的法眼,做对了才有面试的机会。

至于那些button click, gridview binding应该就不用测了吧?


测web page是integration test, 一般不认为是testable,除非特别强调,也可以借助一些framework测试。但要写比较详细的deployment instruction,比较烦,如果他们强调的是unit test,就基本上不要去管了。

2010年度奖章获得者

发表于 2011-2-6 09:20 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 uowzd01 于 2011-2-5 21:59 发表
其实是道面试题,给了个asp.net的application,要写unit test

我现在暂且不管那些web control, button click之类的test。尽量把逻辑都refactor到了app_code这个目录下,然后引用nunit.framework,写了一个test class,问题是 ...


先要纠正一下概念。

你有app_code, 你那个就叫, “asp.net website”, 而不是 asp.net application.

两者不一样的, 正对你得test 来说也很不同。
足迹 Reader is phenomenal. If you never used, you never lived 火速下载

发表于 2011-2-6 09:42 |显示全部楼层
此文章由 uowzd01 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 uowzd01 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 dalaohu 于 2011-2-6 09:20 发表


先要纠正一下概念。

你有app_code, 你那个就叫, “asp.net website”, 而不是 asp.net application.

两者不一样的, 正对你得test 来说也很不同。

原来是这样,以前被问到过这个问题,web application and website的区别,我以为没有区别

2010年度奖章获得者

发表于 2011-2-6 09:48 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 乱码 于 2011-2-5 22:28 发表
用mice右击你的website,然后publish web site,然后到你指定的website下面有precompiled/app_code的fold中找dll.建一个lib project,加上对nunit framework 和你那个web site的reference,就已可以做正常的nunit test了。


大哥,你的想法很有创意, 可是思路不对, 是行不通的。对新人来说是很大的误导。

先说题外话, 要那dll, 不必那么麻烦的 “publish web site”, 直接去 /bin 里拿好了。

unit test 是不能对一个“死”的dll 来做的, 毫无意义。 我们不是为了test 而写test的。 test是为了确保在第一时间知道整个系统的运行情况。
你想一下,就算你对这个死的dll写了一大端test, app_code 里的code变了, 或则aspx.cs 变了, 你的test就其不到应有的作用。

一般来说 “web site” 的话,就只有用functional test 了, 思路是把这个website 先run 起来,然后 request,并test他的response。
这里有两篇文章,你参考。

Create an ASP.NET Unit Test
http://msdn.microsoft.com/en-us/library/ms182526(VS.80).aspx

NUnit Unit Testing of ASP.NET Pages, Base Classes, Controls and other widgetry using Cassini (ASP.NET Web Matrix/Visual Studio Web Developer)
http://www.hanselman.com/blog/NU ... ioWebDeveloper.aspx

如果你一定要test app_code 里的 classes。

我有两个建议。

1。 为什么不新创建一个Class library Project, 把app_code里的class全部移到哪里去呢? test会简单很多。

2。 在test里你必须动态检测到 “bin”, 那后把你要的dll, load进来test
string tempPath = AppDomain.CurrentDomain.BaseDirectory;
string tempBinPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"bin");

评分

参与人数 2积分 +7 收起 理由
澳贼 + 4 谢谢奉献
uowzd01 + 3 感谢分享

查看全部评分

足迹 Reader is phenomenal. If you never used, you never lived 火速下载

发表于 2011-2-6 09:55 |显示全部楼层
此文章由 uowzd01 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 uowzd01 所有!转贴必须注明作者、出处和本声明,并保持内容完整
不publish website拿不到dll的,好像是隐藏起来的
Advertisement
Advertisement

2010年度奖章获得者

发表于 2011-2-6 10:01 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 uowzd01 于 2011-2-6 09:55 发表
不publish website拿不到dll的,好像是隐藏起来的


拿我从此金盆洗手, 不搞IT了

尽管我十来年没用 ”web site“, 但你只要build 一下 这个website, dll 就都在bin里了。

bin 是website 的立身之本。

你去打开那个目录看看。

website deploy的话,那个bin是一定要在,才行的。
足迹 Reader is phenomenal. If you never used, you never lived 火速下载

2010年度奖章获得者

发表于 2011-2-6 10:20 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我觉得你那个面试单位也够高笑的。

用app_code 的人, 居然还提什么unit test。

你如果面试中对他们感觉不好, 我劝你别去了, 肯定是一特混乱的地方。相信我的直觉。
足迹 Reader is phenomenal. If you never used, you never lived 火速下载

发表于 2011-2-6 11:24 |显示全部楼层
此文章由 uowzd01 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 uowzd01 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 dalaohu 于 2011-2-6 10:20 发表
我觉得你那个面试单位也够高笑的。

用app_code 的人, 居然还提什么unit test。

你如果面试中对他们感觉不好, 我劝你别去了, 肯定是一特混乱的地方。相信我的直觉。

noted

发表于 2011-2-6 12:54 |显示全部楼层
此文章由 uowzd01 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 uowzd01 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 dalaohu 于 2011-2-6 09:48 发表



unit test 是不能对一个“死”的dll 来做的, 毫无意义。 我们不是为了test 而写test的。 test是为了确保在第一时间知道整个系统的运行情况。
你想一下,就算你对这个死的dll写了一大端test, app_code 里的code变了, 或则aspx.cs 变了, 你的test就其不到应有的作用。

说的很好,尤其是对于这种知道源代码的dll,老虎大哥的方法更胜一筹,刚才把app_code下的代码移动到了一个叫做“app_code”的class library project里面了,然后asp.net reference这个project,这样就可以随便写nunit test了。

发表于 2011-2-6 13:24 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 dalaohu 于 2011-2-6 09:48 发表


大哥,你的想法很有创意, 可是思路不对, 是行不通的。对新人来说是很大的误导。

先说题外话, 要那dll, 不必那么麻烦的 “publish web site”, 直接去 /bin 里拿好了。

unit test 是不能对一个“死”的dll 来做的, 毫无意 ...


1.web site 而不是web project在2005刚出来的时候这个就很有争议,我们team当时就对这个问题作过讨论,结论是能用project就不用web site,你的“直接去 /bin 里拿好了”是拍大腿想出来的吧?你最好自己实际建一个website看看能不能这么做

2. app_code中改变了,republish一下就完了,reference都不用变,重新run test cases,我不知道你说“死”的dll是什么意思。 code变了,重新run test cases这是基本规矩。

2.让website run起来,对request/response作测试不是unit test,是integration test,我在上面的帖子里有阐述。

3.你的建议1对别人的要求有改动,新建一个project可能可以混过去,但这种方法是没有办法的办法,只能让interviewer觉得你无计可施了。试想真正的solution,已经作成web site,让你后来补做unit test,你能重建一个新的project么?就为了让它testable? 建议二可能需要reflection,给unit test造成不必要的麻烦和复杂,我个人不会采纳。

4.现在争论谁对谁错没意义,这个问题我很久之前专门研究过,最省力/改动最小的solution就是这个,而且在一些projects做过应用,至于是不是能pass lz的interview,就要看lz自己的选择了,it's not my call, not urs either.

[ 本帖最后由 乱码 于 2011-2-6 13:45 编辑 ]
Advertisement
Advertisement

发表于 2011-2-6 13:45 |显示全部楼层
此文章由 uowzd01 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 uowzd01 所有!转贴必须注明作者、出处和本声明,并保持内容完整
乱码老大的办法改动最小,最省力,老虎的办法改动适中,测试最方便。

两位都是仙人

2010年度奖章获得者

发表于 2011-2-6 13:50 |显示全部楼层

回复 16# 的帖子

此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
嘿, 我现在懒得跟人1,2,3,4,5 的一条条辩论了。
你这4点,我一条条来辩的话会比较ugly了。 还是各抒己见,以和为贵吧。
觉得大家的思路,背景不经相同。

天热, 我吹空调去了, 住楼主找工顺利。
足迹 Reader is phenomenal. If you never used, you never lived 火速下载

发表于 2011-2-6 13:51 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 uowzd01 于 2011-2-6 13:45 发表
乱码老大的办法改动最小,最省力,老虎的办法改动适中,测试最方便。

两位都是仙人


想想这种场景:“试想真正的solution,已经作成web site,让你后来补做unit test,你能重建一个新的project么?就为了让它testable?”

如果这时一个interview的考点,你建一个新的project很可能就fail掉了。

My point is made, I'd shut up now.

发表于 2011-2-6 14:05 |显示全部楼层
此文章由 uowzd01 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 uowzd01 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我给面试官提供两个solution吧,让他自己选去

发表于 2011-2-6 14:06 |显示全部楼层
此文章由 limyae2009 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 limyae2009 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Asp.net的Web site 和 Web application有什么区别呢?
Advertisement
Advertisement

发表于 2011-2-6 14:06 |显示全部楼层
此文章由 uowzd01 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 uowzd01 所有!转贴必须注明作者、出处和本声明,并保持内容完整
双雄就是双雄,辩论关键是能学到东西,面试通不通过倒在其次了,反正工作机会还有。

发表于 2011-2-6 14:07 |显示全部楼层
此文章由 uowzd01 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 uowzd01 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 limyae2009 于 2011-2-6 14:06 发表
Asp.net的Web site 和 Web application有什么区别呢?

这个问题比较蛋疼,如果有兴趣和时间可以放狗搜一搜
头像被屏蔽

禁止发言

发表于 2011-2-7 11:08 |显示全部楼层

ASP.NET: Web Site versus Web Application Project

此文章由 澳贼 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 澳贼 所有!转贴必须注明作者、出处和本声明,并保持内容完整

发表于 2011-2-7 13:20 |显示全部楼层
此文章由 typingdog 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 typingdog 所有!转贴必须注明作者、出处和本声明,并保持内容完整
每次双雄相争都是受益匪浅啊
试着看了一下,我手头的都没有发现build website有直接生成dll的
我们在development完成后用web_delpoy project 把整个code behind file整合成一个dll 然后发布的。

对于website和web application的概念觉得是MS自己再混淆概念。

发表于 2011-2-7 13:22 |显示全部楼层
此文章由 typingdog 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 typingdog 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 乱码 于 2011-2-6 13:51 发表


想想这种场景:“试想真正的solution,已经作成web site,让你后来补做unit test,你能重建一个新的project么?就为了让它testable?”

如果这时一个interview的考点,你建一个新的project很可能就fail掉了。

My point is made, I'd shut up now.


This is a really good point! Never think about this but it is realistic!
Thanks bro!
Advertisement
Advertisement

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部