C# 使用Moles框架模拟静态依赖关系

C# 使用Moles框架模拟静态依赖关系,c#,.net,asp.net-mvc,unit-testing,moles,C#,.net,Asp.net Mvc,Unit Testing,Moles,我正在学习单元测试的Moles框架。我有一个带有AccountController的模板ASP MVC项目,我想测试的方法是Register() [HttpPost] 公共操作结果寄存器(RegisterModel模型) { if(ModelState.IsValid) { 成员资格createStatus createStatus; CreateUser(model.UserName、model.Password、model.Email、null、null、false、null、out-cre

我正在学习单元测试的Moles框架。我有一个带有AccountController的模板ASP MVC项目,我想测试的方法是Register()

[HttpPost]
公共操作结果寄存器(RegisterModel模型)
{
if(ModelState.IsValid)
{
成员资格createStatus createStatus;
CreateUser(model.UserName、model.Password、model.Email、null、null、false、null、out-createStatus);
if(createStatus==MembershipCreateStatus.Success)
{
字符串确认GUID=Membership.GetUser(model.UserName).ProviderUserKey.ToString();
字符串confirmUrl=System.Web.HttpContext.Current.Request.Url.GetLeftPart(Uriplate.Authority)+
“/account/confirm?id=“+confirmationGuid;
var message=new MailService.MessageModel
{
用户名=model.UserName,
MessageSubject=“注册确认”,
MessageBody=“请按照下面的链接激活您的帐户:\n”+confirmUrl
};
MailService.sendconfimationemail(消息);
返回操作(“确认”、“账户”);
}
其他的
{
AddModelError(“,ErrorCodeToString(createStatus));
}
}
返回视图(模型);
}
它取决于静态方法
成员身份。CreateUser
。测试方法如下所示:

我希望Moles框架模拟
寄存器
方法中的静态方法,但在调试时,我发现
createStatus
始终具有
InvalidAnswer
值,因此测试失败。
我如何通过使用Moles框架而不手动创建任何接口或委托来实现这一点?

我终于找到了一种模拟
成员身份的方法。CreateUser
方法,尽管实现有点长

MMembership.createUserStringBooleanObjectMembershipCreateStatusOut=
(字符串用户名、字符串密码、字符串电子邮件、字符串密码问题、,
字符串passwordAnswer,bool已批准,对象提供程序UserKey,
out MembershipCreateStatus@createStatus)=>
{
@createStatus=MembershipCreateStatus.Success;
返回null;
};

我终于找到了一种模拟
成员身份.CreateUser
方法的方法,尽管实现有点长

MMembership.createUserStringBooleanObjectMembershipCreateStatusOut=
(字符串用户名、字符串密码、字符串电子邮件、字符串密码问题、,
字符串passwordAnswer,bool已批准,对象提供程序UserKey,
out MembershipCreateStatus@createStatus)=>
{
@createStatus=MembershipCreateStatus.Success;
返回null;
};

CreateUser的参数是什么?根据CreateUser的参数是什么?根据
    [TestMethod()]
    [HostType("Moles")]
    public void RegisterTest()
    {
        using (MolesContext.Create())
        {                
            var target = new AccountController();
            var model = new RegisterModel
            {
                UserName = "TestUser1",
                Password = "12345678",
                ConfirmPassword = "12345678",
                Email = "mail@mail.com"
            };
            target.Register(model);
            var exists = Membership.GetUser("TestUser1") != null;
            Assert.IsTrue(exists);
        }
    }