我有一个称为“问题”的基类,还有几个子类,例如“ TrueFalse”,“ MultipleChoice”,“ MatchPairs”等。
基类具有所有子类都使用的逻辑方法,例如发送分数和引发事件。
我已经为子类设置了单元测试,但是我不确定如何为基类中的方法设置单元测试。
我做了一些搜索,我知道我需要创建该类的Mock,但是我不确定如何执行此操作,因为我只看到了如何在可实例化对象上执行此操作。
我在项目中安装了Moq&NUnit,因此理想情况下喜欢使用它。我还是编程的新手,这是我第一次添加单元测试,因此,我感谢您能给我任何建议。
我首先在网站上进行了搜索,发现了两个类似的问题,但是他们没有给出有关如何执行此操作的任何示例,只是需要嘲笑它。
非常感谢。
有没有办法可以检查抽象类问题的单元测试中控制台的输出是什么?
我正在使用 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)
但花费了 …
实体框架的[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.
我错过了什么参考?
如何通过数组访问创建用于读取值的表达式树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)
我收到错误声明它不是一个数组.这样做的正确方法是什么?
我通过API POST将此主体发送到我用app创建的提取器.
{"input":{"website/url":"http://www.targetsite.com/"}}
Run Code Online (Sandbox Code Playgroud)
无论我输入什么URL,它总是从同一页面返回结果(我认为它必须是我训练它的那个).我可以把任何字符串放在那里,它完全忽略它.
GET工作正常但我宁愿使用POST.
任何人都知道为什么这不起作用?
在打字稿中映射枚举的正确方法是什么?
例如,我正在使用在线打字稿代码编辑器,这很好用:
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 文件没有枚举定义,因此可能会令人困惑,所以我宁愿这样做如果可能的话..
拥有多个存储库是否会增加资源使用率?
我按照本教程添加了一个包含数据库上下文的存储库服务:https : //docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api
在教程中,存储库用于管理 Todo 项。在我自己的应用程序中,我有几种不同类型的项目和活动,我需要为其提供上下文。我应该为每个人创建一个单独的存储库吗?例如,一个用于查询的存储库,另一个用于用户使用指标的存储库?这样做有任何开销或惩罚吗?
我希望.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?
是否可以在 Visual Studio 2017 调试窗口中显示 NLog(或内置调试器)正在记录的内容?
我已将 NLog 设置为输出到文件,但对于开发而言,能够在调试窗口中查看调试消息会非常方便。我可以看到有关如何使用控制台执行此操作的文章,但是对于 asp.net 项目,没有任何控制台输出,只有调试窗口。
我试图像这样从我的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。
为什么删除不起作用?
c# ×6
asp.net-core ×3
moq ×2
nunit ×2
ag-grid ×1
angular ×1
import.io ×1
lambda ×1
lets-encrypt ×1
linq ×1
nlog ×1
reflection ×1
testing ×1
typescript ×1
unit-testing ×1