小编Gue*_*lla的帖子

如何模拟抽象基类

我有一个称为“问题”的基类,还有几个子类,例如“ TrueFalse”,“ MultipleChoice”,“ MatchPairs”等。

基类具有所有子类都使用的逻辑方法,例如发送分数和引发事件。

我已经为子类设置了单元测试,但是我不确定如何为基类中的方法设置单元测试。

我做了一些搜索,我知道我需要创建该类的Mock,但是我不确定如何执行此操作,因为我只看到了如何在可实例化对象上执行此操作。

我在项目中安装了Moq&NUnit,因此理想情况下喜欢使用它。我还是编程的新手,这是我第一次添加单元测试,因此,我感谢您能给我任何建议。

我首先在网站上进行了搜索,发现了两个类似的问题,但是他们没有给出有关如何执行此操作的任何示例,只是需要嘲笑它。

非常感谢。

c# nunit moq

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

在单元测试中检查控制台输出

有没有办法可以检查抽象类问题的单元测试中控制台的输出是什么?

我正在使用 NUnit 和 Moq。

我的单元测试如下所示:

    [Test]
    public void QuestionAsk()
    {
        var mock = new Mock<Question>(new object[]{"question text",true});

        mock.CallBase = true;

        var Question = mock.Object;

        Question.Ask();

        mock.Verify(m => m.Ask(), Times.Exactly(1));

    }
Run Code Online (Sandbox Code Playgroud)

在这里,我检查 Question.Ask() 是否被调用并且工作正常。Ask() 不返回值,因此我无法将其分配给变量。该函数仅输出到控制台。

有没有办法在测试中验证输出==“问题文本”?

编辑:忘记提及 Question 是一个抽象基类。

我尝试了使用此代码建议的 Concole.Setout 方法:

    [Test]
    public void QuestionAsk()
    {
        var mock = new Mock<Question>(new object[]{"question text",true});

        mock.CallBase = true;

        var Question = mock.Object;

        using (var consoleText = new StringWriter())
        {
            Console.SetOut(consoleText);
            Question.Ask();
            Assert.That(consoleText.ToString(), Is.StringMatching("question text"));
        }
        mock.Verify(m => m.Ask(), Times.Exactly(1));

    }
Run Code Online (Sandbox Code Playgroud)

但花费了 …

c# testing nunit unit-testing moq

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

找不到类型或命名空间名称"Key"

实体框架的[Key]属性对我不起作用.我有一个console应用程序,我正在尝试添加此类:

public class Post
{
    [Key]
    public int IDPost { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }
    public int IDBlog { get; set; }
    public virtual Blog Blog { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我收到这些错误:

找不到类型或命名空间名称'Key'(您是否缺少using指令或程序集引用?)

找不到类型或命名空间名称'KeyAttribute'(您是否缺少using指令或程序集引用?)

我添加了这个使用:

using System.Data.Entity;
Run Code Online (Sandbox Code Playgroud)

我将这些引用添加到项目中:

EntityFramework
EntityFramework.SqlServer
System.ComponentModel.DataAnnotations

我正在使用EF6和VS2012.

我错过了什么参考?

c# entity-framework

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

按键名称的IDictionary <string,object>上的Expression.ArrayAccess()

如何通过数组访问创建用于读取值的表达式树IDictionary<string,object>

我想代表:

((IDictionary<string,object>)T)["KeyName"]
Run Code Online (Sandbox Code Playgroud)

我找不到任何用于访问字符串名称的ArrayAccess示例.我想要的东西:

var parameterExpression = Expression.Parameter(typeof(IDictionary<string, object>));

var paramIndex = Expression.Constant("KeyName");

var arrayAccess = Expression.ArrayAccess(parameterExpression, paramIndex);
Run Code Online (Sandbox Code Playgroud)

我收到错误声明它不是一个数组.这样做的正确方法是什么?

c# linq reflection lambda

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

API忽略我在POST上的输入

我通过API POST将此主体发送到我用app创建的提取器.

{"input":{"website/url":"http://www.targetsite.com/"}}
Run Code Online (Sandbox Code Playgroud)

无论我输入什么URL,它总是从同一页面返回结果(我认为它必须是我训练它的那个).我可以把任何字符串放在那里,它完全忽略它.

GET工作正常但我宁愿使用POST.

任何人都知道为什么这不起作用?

import.io

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

在打字稿中映射枚举

在打字稿中映射枚举的正确方法是什么?

例如,我正在使用在线打字稿代码编辑器,这很好用:

class Message
{
    name: string;
    min: number;
    max: number;
    messageType: MessageType;
}

enum MessageType
{
    none,
    email,
    sms

}

var jsonObj = {
    "name": "some name",
    "min": 0,
    "max": 10,
    "messageType": MessageType.email

}

var messageInstance: Message = <Message>jsonObj;

console.log(messageInstance);
Run Code Online (Sandbox Code Playgroud)

但是,MessageType.email如果我在 json 文件中使用它,则在我的 IDE 中会显示“预期值”错误。

如果我尝试:

"messageType": "MessageType.email"
Run Code Online (Sandbox Code Playgroud)

在在线代码编辑器中,这会产生一个错误。

我才刚刚开始,找不到任何关于如何完成的明确说明。

编辑:

我刚刚意识到枚举是基于数字的,"messageType": 2或者任何相应的数字都是正确的方法。

有什么方法可以使 json 文件中的枚举可读(即像 MessageType.email 这样的值),因为单独查看时,json 文件没有枚举定义,因此可能会令人困惑,所以我宁愿这样做如果可能的话..

typescript

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

我应该有多个存储库吗?

拥有多个存储库是否会增加资源使用率?

我按照本教程添加了一个包含数据库上下文的存储库服务:https : //docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api

在教程中,存储库用于管理 Todo 项。在我自己的应用程序中,我有几种不同类型的项目和活动,我需要为其提供上下文。我应该为每个人创建一个单独的存储库吗?例如,一个用于查询的存储库,另一个用于用户使用指标的存储库?这样做有任何开销或惩罚吗?

c# asp.net-core-mvc asp.net-core

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

添加.well-知道asp.net核心

我希望.well-known在我的root中有一个目录用于letsencrypt续订.

我添加了一条路线.well-known:

 app.UseStaticFiles(new StaticFileOptions
        {
            FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @".well-known")),
            RequestPath = new PathString("/.well-known"),
            ServeUnknownFileTypes = true // serve extensionless file
        });
Run Code Online (Sandbox Code Playgroud)

我在我的wwwroot中添加了一个direcotry,.well-known但是当我发布时它永远不会被复制到输出中.

我尝试添加一个文件,并编辑csproj:

  <ItemGroup>
    <Content Include="wwwroot\.well-known\" />
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

每次我发布我都要手动创建目录.如何将其自动添加到wwwroot?

c# lets-encrypt asp.net-core

4
推荐指数
3
解决办法
2133
查看次数

在 asp.net core 应用程序的调试窗口中显示 NLog 输出

是否可以在 Visual Studio 2017 调试窗口中显示 NLog(或内置调试器)正在记录的内容?

我已将 NLog 设置为输出到文件,但对于开发而言,能够在调试窗口中查看调试消息会非常方便。我可以看到有关如何使用控制台执行此操作的文章,但是对于 asp.net 项目,没有任何控制台输出,只有调试窗口。

nlog asp.net-core visual-studio-2017

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

ag-Grid行未删除

我试图像这样从我的ag-Grid删除一行:

let alertRow : RowNode = this.gridApi.getRowNode(rowIndex);
console.log(alertRow);
this.gridApi.updateRowData({remove: [alertRow]});
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误:

ag-Grid:找不到数据项,因为未找到对象

我可以在控制台中看到RowNode正确的节点并存在。我也可以使用updateRowData()添加新行,但尝试删除则会出现此错误。

我在Angular 6组件中使用ag-Grid。

为什么删除不起作用?

ag-grid angular

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