我试图模拟HttpContext,以便我可以单元测试我的控制器的Request.IsAuthenicated调用.我正在使用我在Scott Hanselman博客上发现的代码来使用rhino.mocks模拟HttpContext.所以我有这个单元测试件:
PostsController postsController = new PostsController(postDL);
mocks.SetFakeControllerContext(postsController);
Expect.Call(postsController.Request.IsAuthenticated).Return(true);
Run Code Online (Sandbox Code Playgroud)
在我的控制器操作中,我有类似的事情,
if(Request.IsAuthenticated)....
当我尝试运行单元测试时,测试失败抛出空异常,当我尝试调试单元测试时,我看到HttpContext从未分配给控制器.有任何想法吗?
如果我的界面只有getter的签名,例如:
public interface IInterface
{
object Id{get;}
}
Run Code Online (Sandbox Code Playgroud)
因此,当我拥有该类时,接口仅在任何已实现的类上指定Id的公共getter:
public class Simple : IInterface
{
object Id
{
get{return something;}
set{ do something else;}
}
}
Run Code Online (Sandbox Code Playgroud)
由于未在接口中定义setter,编译器会抱怨setter.但是我并没有就限制器的接口合同做出任何规定; 为什么接口坚持派生类的setter?
我正在根据Rob Connery的店面视频系列和应用这些技术开展这个mvc项目.在过滤和扩展方法上,我开始重复自己很多,例如:
public static Sponsor WithID(this IQueryable<Sponsor>qry, int ID)
{
return qry.SingleOrDefault(s => s.ID== ID);
}
public static Keyword WithID(this IQueryable<Keyword>qry,int ID)
{
return qry.SingleOrDefault(s => s.ID== ID);
}
....
Run Code Online (Sandbox Code Playgroud)
为了防止这种情况,我尝试编写这样的通用扩展:
public static T WithID<T>(this IQueryable<T>qry,int ID)
{
return qry.SingleOrDefault(s=>ID==ID);
}
Run Code Online (Sandbox Code Playgroud)
但是s没有ID,那你怎么解决这个问题呢?
asp.net ×1
asp.net-mvc ×1
c# ×1
generics ×1
interface ×1
methods ×1
mocking ×1
rhino-mocks ×1
unit-testing ×1