我正在努力为包含User.Identity.Name功能的动作方法实现单元测试.我遇到的方法失败,因为他们建议写入的属性抛出'只读'错误(例如写入HttpContext或控制器User)
我有一个动作方法:
[Authorize]
public async Task<ViewResult> EditProject(int projectId)
{
Project project = repository.Projects.FirstOrDefault(p => p.ProjectID == projectId);
if (project != null)
{
//HOW DO I MOCK USER.IDENTITY.NAME FOR THIS PORTION?
var user = await userManager.FindByNameAsync(User.Identity.Name);
bool owned = await checkIfUserOwnsItem(project.UserID, user);
if (owned)
{
return View(project);
}
else
{
TempData["message"] = $"User is not authorized to view this item";
}
}
return View("Index");
}
Run Code Online (Sandbox Code Playgroud)
如果我想对这个动作方法进行单元测试,我该如何模拟该User.Identity对象?
[Fact]
public async Task Can_Edit_Project()
{
//Arrange …Run Code Online (Sandbox Code Playgroud) 使用Moq和xUnit进行单元测试的新手.我试图模拟一个SignInManager在控制器构造函数中使用的构建单元测试.我可以为SignInManager构造函数找到的文档说它接受一个UserManager和AuthenticationManager对象:https://msdn.microsoft.com/en-us/library/mt173769(v = vs.108).aspx #M:Microsoft.AspNet.Identity .Owin.SignInManager`2.
当我尝试模拟控制器时,我收到一个错误,说它无法实例化SignInManager和AuthenticationManager类的代理.
错误:
"消息:Castle.DynamicProxy.InvalidProxyConstructorArgumentsException:无法实例化类的代理:Microsoft.AspNetCore.Identity.SignInManager1 [[Models.AppUser ,, Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]].找不到与给定参数匹配的构造函数:Castle.Proxies.UserManager`1Proxy Castle.Proxies.AuthenticationManagerProxy"
单元测试:
public void Can_Send_Password_Reset_Email()
{
//Arrange
//create mock services
Mock<IEmailService> mockEmailService = new Mock<IEmailService>();
Mock<ILessonRepository> mockRepo = new Mock<ILessonRepository>();
Mock<UserManager<AppUser>> mockUsrMgr = GetMockUserManager();
var mockSignInMgr = GetMockSignInManager();
Mock<UserValidator<AppUser>> mockUsrVal = new Mock<UserValidator<AppUser>>();
Mock<PasswordValidator<AppUser>> mockPwdVal = new Mock<PasswordValidator<AppUser>>();
Mock<PasswordHasher<AppUser>> mockPwdHshr = new Mock<PasswordHasher<AppUser>>();
Mock<ForgotPasswordModel> model …Run Code Online (Sandbox Code Playgroud) .Net 核心的新手。
尝试实现类似于以下内容的下拉列表: MVC6 Dropdownlist of Country
在我的模型课中,我有
public SelectList SiteList { get; set; }
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我有:
var sites = _context.Site.OrderBy(s => s.Name).Select(x => new { Id = x.ID, Value = x.Name });
var model = new Issue();
model.SiteList = new SelectList(sites, "Id", "Value");
return View(model);
Run Code Online (Sandbox Code Playgroud)
在我看来,我有:
<td class="input-item">
<select asp-for="SiteID" asp-items="@Model.SiteList"></select>
</td>
Run Code Online (Sandbox Code Playgroud)
当我尝试实施迁移时,出现以下错误:实体类型“Microsoft.AspNetCore.Mvc.Rendering.SelectListGroup”需要定义主键。
我尝试忽略我的 Migrations 命名空间:
modelBuilder.Entity<Issue>().Ignore(i => i.SiteList);
Run Code Online (Sandbox Code Playgroud)
但我不完全确定我是否在正确的地方完成了这项工作。
我有一类Signature对象:
public class Signature
{
public int SignatureID { get; set; }
public int FormID { get; set; }
public string Title { get; set; }
public string Email { get; set; }
[Display(Name = "Signed Date:")]
public DateTime? Date { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一Form.cs堂课有一个虚拟的签名列表
public virtual List<Signature> Signatures { get; set; }
Run Code Online (Sandbox Code Playgroud)
在控制器中,通过以下方式填充列表:
form.Signatures = repository.Signatures.Where(s => s.FormID == form.FormID).ToList();
Run Code Online (Sandbox Code Playgroud)
在表单视图中,显示相关签名的列表:
@foreach (var signature in Model.Signatures)
{
<div class="text-center">
<label asp-for="@signature.Title"></label>
<input asp-for="@signature.Title" /> …Run Code Online (Sandbox Code Playgroud) 我正在遵循 Adam Freeman 的“Pro ASP.NET Core MVC 2”中的 API 说明。我有以下 API 控制器类:
[Route("api/[controller]")]
public class ReservationController : Controller
{
private IRepository repository;
public ReservationController(IRepository repo) => repository = repo;
[HttpGet]
public IEnumerable<Reservation> Get() => repository.Reservations;
[HttpGet("{id}")]
public Reservation Get(int id) => repository[id];
[HttpPost]
public Reservation Post([FromBody] Reservation res) =>
repository.AddReservation(new Reservation
{
ClientName = res.ClientName,
Location = res.Location
});
[HttpPut]
public Reservation Put([FromBody] Reservation res) => repository.UpdateReservation(res);
[HttpPatch("{id}")]
public StatusCodeResult Patch(int id, [FromBody]JsonPatchDocument<Reservation> patch)
{
Reservation res = Get(id);
if(res …Run Code Online (Sandbox Code Playgroud) 我有许多变量表示我可以更换的设备。更换后,它们会改善影响指标[I]。每个还具有相关的年度成本节省[S]和更换成本[C]。
n <- 1000 # variable count
# impact
# negative for use in minimization function
I <- -rnorm(n, mean=20000, sd=8000)
# cost savings
s <- rnorm(n, mean=2500, sd=1000)
# replacement cost
c <- rnorm(n, mean=15000, sd=5000)
Run Code Online (Sandbox Code Playgroud)
我想选择要替换的组件,以在预算范围内最大限度地发挥全面影响,同时仍然确保整个项目(作为一个整体)满足简单的投资回收目标。
payback_goal <- 3
budget <- 1000000
Run Code Online (Sandbox Code Playgroud)
这个问题由下面的方程描述。
我正在努力设置这个lpSolveAPI。具体来说,我不知道如何合并方程式。3.
library(lpSolveAPI)
m <- 2 # number of constraints, disregarding binary constraint set by type
my.lp <- make.lp(m, n)
set.row(my.lp, 1, c)
# i don't think this …Run Code Online (Sandbox Code Playgroud) 我有一个视图模型,它有一个IEnumerable对象,我循环遍历该对象以显示数据表。该模型还有一个值数组,我想在同一个表中显示这些值。
可枚举数据以foreach循环方式显示。我尝试添加一个索引计数器来循环遍历同一个表上的数组,但计数器永远不会增加。如何将两个元素组合在同一个表中?
//my foreach loop goes through my Item List
@foreach (var item in @Model.ItemList)
{
//i need an indexer to go through MyArray
var i = 0;
<tr>
<td>@Html.DisplayFor(shortDate => item.StartDate)</td><td>@Html.DisplayFor(shortDate => item.EndDate)</td><td>@Model.MyArray[i]</td><td>@item.Value</td>
</tr>
//here the index 'i' never seems to increment
i++;
}
Run Code Online (Sandbox Code Playgroud)
结果是MyArray[0]所有行只显示值。
尝试脚手架控制器时,我收到以下错误:
"运行所选代码生成器时出错:'实体类型'Company.Models.Office'需要在Microsoft.VisualStudio.Web.CodeGeneration.ActionInvoker.b_6-0()中定义主键.
我是MVC Core的新手,但我的理解是主键默认定义为ID或classnameID.我还尝试添加[Key]属性并将主键重命名为OfficeID.我已经与另一个类进行了类似的过程,并没有遇到这个问题
public class Office
{
public int ID;
public string Name;
public int SiteID;
}
Run Code Online (Sandbox Code Playgroud) 我没有通知我的打印机开始新的页面.在设置e.HasMorePages = True后,它继续在第1页上打印.使用我的字体,我可以每页干净地打印~30行并仍然保持边框
'print the text
'create a string array from the listView equipment items
Dim equip() As classReportObj
ReDim equip(0 To lstReport.Items.Count - 1)
For i = 0 To lstReport.Items.Count - 1
equip(i) =
New classReportObj() With {.name = lstReport.Items(i).Text, .type = lstReport.Items(i).SubItems(1).Text,
.completeTests = lstReport.Items(i).SubItems(2).Text, .incompleteTests = lstReport.Items(i).SubItems(3).Text,
.status = lstReport.Items(i).SubItems(4).Text}
Next i
'get the coordinates for the first row and the columns
Dim y As Integer = e.MarginBounds.Top
Dim x0 As Integer = e.MarginBounds.Left
Dim x1 As …Run Code Online (Sandbox Code Playgroud) 假设我有一些数据,其中有多个数据点,其中一些数据点共享一个组标识符:
group <- rep(c(1:5), times=3)
cost <- rnorm(length(group), 100, 5)
current_score <- rnorm(length(group), 7, 2)
future_score <- current_score*runif(1)
dat <- data.frame(group, cost, current_score, future_score)
Run Code Online (Sandbox Code Playgroud)
以及给出总体加权组得分的函数:
wt_score <- function(group, dat)
{
one_group_dat <- dat[dat$group == group, ]
wt_score <- sum(one_group_dat$cost * (one_group_dat$current_score - one_group_dat$future_score))/sum(one_group_dat$cost)
return(wt_score)
}
Run Code Online (Sandbox Code Playgroud)
有没有办法对上述函数进行矢量化,以便我不必使用如下所示的循环?问题在于,在实践中,一个函数应用于数万个组和数百万个数据点,因此循环非常慢。
# THIS IS TOO SLOW!
dat$wt_score <- 0
for(i in 1:nrow(dat))
{
dat$wt_score[i] <- wt_score(dat$group[i], dat)
}
Run Code Online (Sandbox Code Playgroud) asp.net-core ×5
c# ×5
asp.net ×2
r ×2
unit-testing ×2
api ×1
asp.net-mvc ×1
dplyr ×1
lpsolve ×1
moq ×1
postman ×1
printing ×1
razor ×1
vb.net ×1
xunit ×1