小编coo*_*and的帖子

用于单元测试的ASP.NET Core中的Mock User.Identity

我正在努力为包含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)

c# unit-testing xunit asp.net-core-mvc

6
推荐指数
2
解决办法
7013
查看次数

模拟SignInManager

使用Moq和xUnit进行单元测试的新手.我试图模拟一个SignInManager在控制器构造函数中使用的构建单元测试.我可以为SignInManager构造函数找到的文档说它接受一个UserManagerAuthenticationManager对象:https://msdn.microsoft.com/en-us/library/mt173769(v = vs.108).aspx #M:Microsoft.AspNet.Identity .Owin.SignInManager`2.

当我尝试模拟控制器时,我收到一个错误,说它无法实例化SignInManagerAuthenticationManager类的代理.

错误:

"消息: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)

c# asp.net unit-testing moq asp.net-core

5
推荐指数
4
解决办法
3552
查看次数

实体类型“Microsoft.AspNetCore.Mvc.Rendering.SelectListGroup”需要定义一个主键

.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)

但我不完全确定我是否在正确的地方完成了这项工作。

asp.net entity-framework asp.net-core

4
推荐指数
1
解决办法
3375
查看次数

将对象列表绑定到表单

我有一类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)

asp.net-mvc model-binding asp.net-core

4
推荐指数
1
解决办法
4216
查看次数

POSTMAN POST 请求返回不支持的媒体类型

我正在遵循 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)

c# api postman asp.net-core

4
推荐指数
1
解决办法
1万
查看次数

应用 lpSolveAPI

我有许多变量表示我可以更换的设备。更换后,它们会改善影响指标[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)

r mathematical-optimization linear-programming lpsolve

4
推荐指数
1
解决办法
119
查看次数

在 Razor 中增加索引计数器

我有一个视图模型,它有一个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]所有行只显示值。

c# razor asp.net-core

2
推荐指数
1
解决办法
5897
查看次数

在MVC核心中搭建控制器时未找到主键

尝试脚手架控制器时,我收到以下错误:

"运行所选代码生成器时出错:'实体类型'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)

c# asp.net-core-mvc

1
推荐指数
2
解决办法
2414
查看次数

vb.NET:打印多个页面

我没有通知我的打印机开始新的页面.在设置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)

vb.net printing

0
推荐指数
1
解决办法
2082
查看次数

对 R 中需要分组的函数进行向量化

假设我有一些数据,其中有多个数据点,其中一些数据点共享一个组标识符:

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)

r vectorization dplyr

0
推荐指数
1
解决办法
55
查看次数