C# 使用Moles框架模拟静态依赖关系
我正在学习单元测试的Moles框架。我有一个带有AccountController的模板ASP MVC项目,我想测试的方法是Register()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
[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);
}
}