C# ASP.NET MVC5的正确单元测试
我有以下代码,但我不知道我为这些方法编写了哪些适当的单元测试,以及如何完成。基本上我想使用NUnit.Framework 提前感谢您提供的任何线索C# ASP.NET MVC5的正确单元测试,c#,unit-testing,nunit,asp.net-mvc-5,C#,Unit Testing,Nunit,Asp.net Mvc 5,我有以下代码,但我不知道我为这些方法编写了哪些适当的单元测试,以及如何完成。基本上我想使用NUnit.Framework 提前感谢您提供的任何线索 [AllowAnonymous] public ActionResult ForgotPassword(string id) { var model = new ForgotPasswordViewModel(); if (!string.IsNullOrEmpt
[AllowAnonymous]
public ActionResult ForgotPassword(string id)
{
var model = new ForgotPasswordViewModel();
if (!string.IsNullOrEmpty(id))
{
#region Process Reset Password Key
try
{
var forgotPasswordEvent = AppModel.ForgotPasswordEvents.SingleOrDefault(x => x.UIDHash == id);
if (forgotPasswordEvent != null)
{
var stringToHash = string.Format("{0}---{1}---{2}", forgotPasswordEvent.UID.ToString(),
forgotPasswordEvent.UserId.ToString(), forgotPasswordEvent.Created.ToString());
var readyHash = SecurityHelper.GetHashString(stringToHash);
if (id == readyHash)
{
var forgotPasswordEventUserId = forgotPasswordEvent.UserId.ToString();
var realUser = AppModel.AspNetUsers.SingleOrDefault(x => x.Id == forgotPasswordEventUserId);
if (realUser != null)
{
var resetPasswordViewModel = new ResetPasswordViewModel();
resetPasswordViewModel.ResetPasswordData = id;
resetPasswordViewModel.UserName = realUser.UserName;
return RedirectToAction("ResetPassword", "Account", resetPasswordViewModel); // ResetPassword(resetPasswordViewModel);
}
}
}
else
{
return RedirectToAction("Index", "Home");
}
}
catch (Exception)
{
}
#endregion
}
#region Check if the user is logged in and fill out fileds for him.
var sessionManager = SessionWrapper.GetFromSession<SessionManager>("_SessionManager");
if (sessionManager != null)
{
var clientId = sessionManager.AppUser.ClientId;
if (clientId != null)
{
model.Email = sessionManager.AppUser.EmailID;
model.UserName = sessionManager.AppUser.UserName;
model.IsLoggedInUser = true;
}
}
#endregion
return View(model);
}
[HttpPost]
[AllowAnonymous]
public ActionResult ForgotPassword(ForgotPasswordViewModel model, FormCollection formCollection)
{
if (ModelState.IsValid)
{
try
{
#region Check user input
var user = AppModel.AspNetUsers.SingleOrDefault(x => x.UserName == model.UserName);
var areErrors = false;
if (user == null)
{
ModelState.AddModelError("UserDoesnotExist", DLMModelEntities.Properties.Resource.UserDoesNotExist);
areErrors = true;
}
if (user.EmailID != model.Email)
{
ModelState.AddModelError("EmailIsWrong", DLMModelEntities.Properties.Resource.EmailIsWrong);
areErrors = true;
}
if (areErrors)
return View(model);
#endregion
#region Send Email and inform user
try
{
var forgotPasswordEvent = new ForgotPasswordEvent();
var resetPasswordEmailUserState = new ResetPasswordEmailUserState();
resetPasswordEmailUserState.ForgotPasswordEventId = Guid.NewGuid();
resetPasswordEmailUserState.UserId = Guid.Parse(user.Id);
resetPasswordEmailUserState.Created = DateTime.Now;
forgotPasswordEvent.UID = resetPasswordEmailUserState.ForgotPasswordEventId;
forgotPasswordEvent.UserId = resetPasswordEmailUserState.UserId;
forgotPasswordEvent.IsSent = false;
forgotPasswordEvent.Created = resetPasswordEmailUserState.Created;
var stringToHash = string.Format("{0}---{1}---{2}", resetPasswordEmailUserState.ForgotPasswordEventId.ToString(),
resetPasswordEmailUserState.UserId.ToString(), resetPasswordEmailUserState.Created.ToString());
forgotPasswordEvent.UIDHash = SecurityHelper.GetHashString(stringToHash);
AppModel.ForgotPasswordEvents.Add(forgotPasswordEvent);
AppModel.SaveChanges();
var smtp = (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp");
// Set the MailerModel properties that will be passed to the MvcMailer object.
var m = new MailerModel();
m.UserName = user.UserName;
m.ResetPasswordLink = string.Format("{0}/{1}", Request.Url.AbsoluteUri, forgotPasswordEvent.UIDHash);
m.FromEmail = smtp.From;
m.Subject = AppConfiguration.ResetEmailSubject;
m.ToEmail = model.Email;
var client = new SmtpClientWrapper();
client.SendCompleted += (sender, e) =>
{
if (e.Error != null || e.Cancelled)
{
// Handle Error
}
else
{
try
{
var forgotPasswordEventsToUpdate = AppModel.ForgotPasswordEvents.SingleOrDefault(x => x.UID == resetPasswordEmailUserState.ForgotPasswordEventId);
if (forgotPasswordEventsToUpdate != null)
{
forgotPasswordEventsToUpdate.IsSent = true;
AppModel.SaveChanges();
}
}
catch (Exception ex)
{
ModelState.AddModelError("EmailEx", ex.Message);
}
}
};
Mailer.PasswordReset(m).SendAsync(resetPasswordEmailUserState, client);
model.IsResetEMailSent = true;
}
catch (Exception ex)
{
ModelState.AddModelError("EmailEx", ex.Message);
}
#endregion
}
catch (Exception ex)
{
ModelState.AddModelError("EmailEx", ex.Message);
}
}
return View(model);
}
[AllowAnonymous]
public ActionResult ForgotPassword(字符串id)
{
var模型=新ForgotPasswordViewModel();
如果(!string.IsNullOrEmpty(id))
{
#区域进程重置密码密钥
尝试
{
var forgotPasswordEvent=AppModel.ForgotPasswordEvents.SingleOrDefault(x=>x.UIDHash==id);
if(forgotPasswordEvent!=null)
{
var stringToHash=string.Format(“{0}-{1}-{2}”,forgotPasswordEvent.UID.ToString(),
forgotPasswordEvent.UserId.ToString(),forgotPasswordEvent.Created.ToString());
var readyHash=SecurityHelper.GetHashString(stringToHash);
if(id==readyHash)
{
var forgotPasswordEventUserId=forgotPasswordEvent.UserId.ToString();
var realUser=AppModel.AspNetUsers.SingleOrDefault(x=>x.Id==forgotPasswordEventUserId);
if(realUser!=null)
{
var resetPasswordViewModel=新的resetPasswordViewModel();
resetPasswordViewModel.ResetPasswordData=id;
resetPasswordViewModel.UserName=realUser.UserName;
返回RedirectToAction(“ResetPassword”、“Account”、resetPasswordViewModel);//ResetPassword(resetPasswordViewModel);
}
}
}
其他的
{
返回重定向到操作(“索引”、“主页”);
}
}
捕获(例外)
{
}
#端区
}
#区域检查用户是否已登录并为其填写文件。
var sessionManager=SessionWrapper.GetFromSession(“_sessionManager”);
if(sessionManager!=null)
{
var clientId=sessionManager.AppUser.clientId;
if(clientId!=null)
{
model.Email=sessionManager.AppUser.EmailID;
model.UserName=sessionManager.AppUser.UserName;
model.IsLoggedInUser=true;
}
}
#端区
返回视图(模型);
}
[HttpPost]
[异名]
公共操作结果ForgotPassword(ForgotPasswordViewModel模型,FormCollection FormCollection)
{
if(ModelState.IsValid)
{
尝试
{
#区域检查用户输入
var user=AppModel.AspNetUsers.SingleOrDefault(x=>x.UserName==model.UserName);
var ARERRORS=错误;
if(user==null)
{
AddModelError(“UserDoesnotExist”,dlmmodelenties.Properties.Resource.UserDoesnotExist);
错误=正确;
}
if(user.EmailID!=model.Email)
{
AddModelError(“EmailIsError”,dlmmodelenties.Properties.Resource.EmailIsError);
错误=正确;
}
如果(错误)
返回视图(模型);
#端区
#区域发送电子邮件并通知用户
尝试
{
var forgotPasswordEvent=新forgotPasswordEvent();
var resetPasswordEmailUserState=新的resetPasswordEmailUserState();
resetPasswordEmailUserState.ForgotPasswordEventId=Guid.NewGuid();
resetPasswordEmailUserState.UserId=Guid.Parse(user.Id);
resetPasswordEmailUserState.Created=DateTime.Now;
forgotPasswordEvent.UID=resetPasswordEmailUserState.ForgotPasswordEventId;
forgotPasswordEvent.UserId=resetPasswordEmailUserState.UserId;
forgotPasswordEvent.IsSent=false;
forgotPasswordEvent.Created=resetPasswordEmailUserState.Created;
var stringToHash=string.Format(“{0}-{1}-{2}”),resetPasswordEmailUserState.ForgotPasswordEventId.ToString(),
resetPasswordEmailUserState.UserId.ToString(),resetPasswordEmailUserState.Created.ToString();
forgotPasswordEvent.UIDHash=SecurityHelper.GetHashString(stringToHash);
AppModel.ForgotPasswordEvents.Add(forgotPasswordEvent);
AppModel.SaveChanges();
var smtp=(SmtpSection)ConfigurationManager.GetSection(“system.net/mailSettings/smtp”);
//设置将传递给MvcMailer对象的MailerModel属性。
var m=新的MailerModel();
m、 用户名=user.UserName;
m、 ResetPasswordLink=string.Format(“{0}/{1}”,Request.Url.AbsoluteUri,forgotPasswordEvent.UIDHash);
m、 FromEmail=smtp.From;
m、 Subject=AppConfiguration.ResetEmailSubject;
m、 ToEmail=model.Email;
var client=new-SmtpClientWrapper();
client.SendCompleted+=(发件人,e)=>
{