Asp.net Mvc Framework 十(测试方法及Filter的示例)

示例下载:
http://files.cnblogs.com/chsword/MyTestMvc.rar

顺遍说一下建立测试的方法
本身Asp.netMvc是提供有测试功能的
在新建Asp.netMVCApplication时,点击确定,会跳出一个Create Project Test的询问
如果选Yes就自动建立一个 "工程名+Test"的测试工程
测试工程要引用Rhino.Mock(最新版本3.4)这一开源项目(下载地址http://www.ayende.com/projects/rhino-mocks/downloads.aspx)
测试代码没有什么好说的了,看了示例自然了解,Scott的MockHelpers使测试更加方便

可以利用类似以下代码进行测试
    [TestMethod]
        
public void Index() {
            HomeController home 
= new HomeController();
            var viewengin 
= new FakeViewEngine();
            home.ViewEngine 
= viewengin;
            MockRepository mock 
= new MockRepository();
            
using (mock.Record()) {
                mock.SetFakeControllerContext(home);
            }

            
using (mock.Playback()) {
                home.Index();
                Assert.AreEqual(
"Index", viewengin.ViewContext.ViewName);
            }

        }

示例说明
示例中有个登录功能
有两个页面
/Post/Index页面只有登录后才能查看
/Post/Post页面只有登录后的admin用户才能查看
否则就会Error
在验证登录时我写了一个扩展方法
    public static class ControllerExtension
    
{
        
public static bool IsPost(this Controller controller) {
            
return controller.Request.Form.Count > 0;
        }

    }

登录时我使用Session来保存用户登录信息

所有用户信息我在 Global中进行初始化
            RegisterRoutes(RouteTable.Routes);
            
//将Application代替数据库用
            Application["Posts"= new List<Post>();//一个账号集合
            Application["Accounts"= new List<Account>();//一个帖子集合
            
//初始化两个账号
            List<Account> la = Application["Accounts"as List<Account>;
            la.Add(
new Account()//这个是管理员
            {
                Username 
= "admin",
                Password 
= "admin"
            }
);
            la.Add(
new Account()//这个是普通用户
            {
                Username 
= "user",
                Password 
= "user"
            }
);


具体的内容看代码就行了,感冒了...很是难受...手纸用了三卷了....(乱世重典)
Asp.net Mvc Framework 系列
posted @ 2008-03-15 13:52 重典 阅读(1779) 评论(13)  编辑 收藏 所属分类: Microsoft MVC

  回复  引用  查看    
#1楼 [楼主]2008-03-15 15:41 | 重典      
沉睡了一觉...太难受了
  回复  引用  查看    
#2楼 2008-03-16 16:42 | 隨風.NET      
注意身体啊
  回复  引用  查看    
#3楼 [楼主]2008-03-16 19:11 | 重典      
@隨風.NET
谢谢关心
  回复  引用  查看    
#4楼 2008-07-27 19:21 | 孤独客      
public static class ControllerExtension
{
public static bool IsPost(this Controller controller) {
return controller.Request.Form.Count > 0;
}
}

弱弱的问一下:这里的“this Controller controller”中this是什么缘由,以前都没见过这中写法。:)
  回复  引用  查看    
#5楼 [楼主]2008-07-27 20:19 | 重典      
@孤独客
C#3.0新特性 叫扩展方法,可以百度一下

  回复  引用  查看    
#6楼 2008-07-27 20:31 | 孤独客      
@重典
3q3q
  回复  引用  查看    
#7楼 [楼主]2008-07-27 21:51 | 重典      
@孤独客
no 3q
  回复  引用  查看    
#8楼 2008-07-28 11:36 | 孤独客      
这些天在网上看了关于.net mvc 框架的资料,很多都是在讲整体框架的使用,没有关于具体方法的讲解,比如,我发现Controller类里有很多方法调用都不清楚,知其然,不知其所以然。在VS2008的MSDN里也找不到相应的帮助文档,请问下怎样才能获得相关的资料,哪里有。
谢谢。
  回复  引用  查看    
#9楼 [楼主]2008-07-28 11:56 | 重典      
@孤独客
其实代码并没有太难,只是可能是知识储备的问题。

1要了解设计模式的知识,MVC中大量使用了观察者等模式,所以设计模式不明白是看不明白其代码的

再者我觉得 mvc 源于monorial而功能monorail r2以后效仿 ROR多一些,所以原理性的东西读些ROR的基础知识应该是有好处的

Agile编程之类的最好也看一下

如果有具体的代码不明白可以问我
  回复  引用  查看    
#10楼 2008-07-28 15:35 | 孤独客      
@重典
比如Controller类里的属性和方法(如ControllerContext等)的用法和涵义不是黑清楚。而且帮助里也找不到相关的说明,有时候只能靠猜。-_-
比如说“return controller.Request.Form.Count > 0”,这里的Request和传统的webform里的又有些不同。这里的Request是基于Controller.Request
而传统的ASP.net里的Request是基于Page.Request的。至于他们之间是否还有其他地方有着不相同的地方,我找不到相关的帮助文档来解惑。

总的来说,就是对MVC架构里出现的新的方法和属性(ControllerContext,FilterExecutingContext等)还没找到渠道去搞懂,MSDN里找不到相关的介绍。你是怎么获得这方面的介绍的,支个招。
可能有点弱,嘿嘿,谢谢。


  回复  引用  查看    
#11楼 2008-07-28 15:54 | 孤独客      
比如在“ BindingHelperExtensions.UpdateFrom(a, Request.Form);”中,我大概可以猜测到该函数的作用,但不能获得关于这个函数的详细说明信息,不知道是不是因为我用的VS2008的问题。
有点困惑。
  回复  引用  查看    
#12楼 [楼主]2008-07-28 16:35 | 重典      
@孤独客
没有问题,智能感智时,没有对函数的具体解释,这是因为这还不是最终版本,如是写全注释文档的话费时费力,我想因为开发团队没有写全
  回复  引用  查看    
#13楼 [楼主]2008-07-28 16:37 | 重典      
@孤独客
因为MVC是有源码的,所以可以通过分析源代码获取这些属性的作用

再者只有多看文章了