C# 模拟HTTPContext-CloudService项目的全局范围?

C# 模拟HTTPContext-CloudService项目的全局范围?,c#,unit-testing,azure,moq,azure-web-roles,C#,Unit Testing,Azure,Moq,Azure Web Roles,我正试图为我的WebRole项目建立一个单元测试框架。我创建了一个模拟HTTP上下文,并将其连接到我尝试测试的控制器上: var fakeHttpContext = new Mock<HttpContextBase>(); var fakeIdentity = new GenericIdentity(username); var principal = new GenericPrincipal(fakeIdentity, null); fakeHttpContext.Setup(t

我正试图为我的WebRole项目建立一个单元测试框架。我创建了一个模拟HTTP上下文,并将其连接到我尝试测试的控制器上:

var fakeHttpContext = new Mock<HttpContextBase>();
var fakeIdentity = new GenericIdentity(username);
var principal = new GenericPrincipal(fakeIdentity, null);

fakeHttpContext.Setup(t => t.User).Returns(principal);
var controllerContext = new Mock<ControllerContext>();
controllerContext.Setup(t => t.HttpContext).Returns(fakeHttpContext.Object);

var controller = new HomeController();
controller.ControllerContext = controllerContext.Object;

@chillax786什么是“全局范围”?每个单元测试应该处理一个代码单元,这意味着控制器中的一个mvc操作(方法)周期(块)。单元测试中没有“全局范围”。如果单元测试中的代码经过多个类,则这是一个集成测试。当然,可以构建一个模拟http应用程序来实例化和注入必要的依赖项,但我们需要查看测试中的代码和测试代码,以建议一个工具。对于单元测试,您可以创建一个
CreateMockController
方法,然后使用该方法将伪造代码放入其中place@zaitsman当我们从实用程序类使用成员资格提供程序时,会遇到问题。我在最初的问题中包括了这个例子。@chillax786“全局范围”到底是什么?每个单元测试应该处理一个代码单元,这意味着控制器中的一个mvc操作(方法)周期(块)。单元测试中没有“全局范围”。如果单元测试中的代码经过多个类,则这是一个集成测试。当然,可以构建一个模拟http应用程序来实例化和注入必要的依赖项,但我们需要查看测试中的代码和测试代码,以建议一个工具。对于单元测试,您可以创建一个
CreateMockController
方法,然后使用该方法将伪造代码放入其中place@zaitsman当我们从实用程序类使用成员资格提供程序时,会遇到问题。我在原来的问题中已经包括了这个例子。
//Mock Context is attached to this controller. When Membership provider is accessed 
//from inside the controller it works fine. However when Membership Provider 
//is used from outside the Controller it returns null. 
public void controlerMethodinHomeController()
{ 
    //Returns Null
    var userID = Utility.GetUserId();

    //Returns valid UserID
    var userID = Membership.GetUser(User.Identity.Name).ProviderUserKey;
}

///Utility Class
public static Guid GetUserId()
{
  var user = Membership.GetUser();
  return user.ProviderUserKey
}