小编Boz*_*Joe的帖子

如何在ASP.NET Core中使用ILogger进行单元测试

这是我的控制器:

public class BlogController : Controller
{
    private IDAO<Blog> _blogDAO;
    private readonly ILogger<BlogController> _logger;

    public BlogController(ILogger<BlogController> logger, IDAO<Blog> blogDAO)
    {
        this._blogDAO = blogDAO;
        this._logger = logger;
    }
    public IActionResult Index()
    {
        var blogs = this._blogDAO.GetMany();
        this._logger.LogInformation("Index page say hello", new object[0]);
        return View(blogs);
    }
}
Run Code Online (Sandbox Code Playgroud)

如你所见,我有2个依赖项,a IDAO和aILogger

这是我的测试类,我使用xUnit来测试和Moq来创建mock和stub,我可以DAO轻松模拟,但是ILogger我不知道该怎么做所以我只是传递null并注释掉调用登录控制器当跑步测试.有没有办法测试,但仍然以某种方式保持记录器?

public class BlogControllerTest
{
    [Fact]
    public void Index_ReturnAViewResult_WithAListOfBlog()
    {
        var mockRepo = new Mock<IDAO<Blog>>();
        mockRepo.Setup(repo => repo.GetMany(null)).Returns(GetListBlog());
        var controller = new BlogController(null,mockRepo.Object);

        var result = controller.Index(); …
Run Code Online (Sandbox Code Playgroud)

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

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

是否有PostgreSQL等效的SQL Server探查器?

我需要查看提交给PostgreSQL服务器的查询.通常我会使用SQL Server探查器在SQL Server域中执行此操作,但我还没有找到如何在PostgreSQL中执行此操作.似乎有相当多的付费工具,我希望有一个开源变种.

postgresql profiler

74
推荐指数
5
解决办法
5万
查看次数

实体框架6代码优先功能映射

我想将Entity Framework 6集成到我们的系统中,但是有问题.

  1. 我想使用Code First.出于其他原因,我不想使用Database First*.edmx文件.
  2. 我使用属性映射[表],[列],这工作正常
  3. 数据库有许多用户定义的函数,我需要在Linq To Entities查询中使用它们.

问题是:

我不能通过像[Table],[Column]这样的属性来映射函数.只有1个属性可用[DbFunction],它需要*.edmx文件.

我可以在*.edmx文件中映射函数,但这意味着我不能使用实体的属性映射:[Table],[Column].必须在*.edmx或属性中填充映射.

我尝试通过以下代码创建DbModel并添加函数:

public static class Functions
{
    [DbFunction("CodeFirstNamespace", "TestEntity")]
    public static string TestEntity()
    {
        throw new NotSupportedException();
    }
}


public class MyContext : DbContext, IDataAccess
{
    protected MyContext (string connectionString)
        : base(connectionString, CreateModel())
    {
    }

    private static DbCompiledModel CreateModel()
    {
        var dbModelBuilder = new DbModelBuilder(DbModelBuilderVersion.Latest);
        dbModelBuilder.Entity<Warehouse>();
        var dbModel = dbModelBuilder.Build(new DbProviderInfo("System.Data.SqlClient", "2008"));

        var edmType = PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String);
        var payload =
            new EdmFunctionPayload
            {
                Schema = "dbo",
                ParameterTypeSemantics = ParameterTypeSemantics.AllowImplicitConversion, …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework sql-function ef-code-first entity-framework-6

27
推荐指数
2
解决办法
3万
查看次数

Google的QUIC是否有一个独立的库?

Google最近发布了名为QUIC的实验性传输协议作为net.quicChrome中的命名空间.我很乐意使用它,因为它看起来非常适合我的用例,但我似乎无法找到任何将其用作独立库的指南.

除了Chrome源代码之外,有没有可用的方法将QUIC作为独立库?

谷歌幻灯片

networking udp tcp protocols

22
推荐指数
1
解决办法
7885
查看次数

TimeSpan配置天数?

看来,ConfigurationElementTimeSpan无法处理超过23:59:59较大的值.有没有解决方法?是继承TimeSpan,并使一个新的TimeSpanValidatorAttribute甚至上班?我需要处理从几分钟到几天的时间跨度.

我正在使用以下配置部分

[ConfigurationProperty("SequenceRolloverDOSCompare", IsRequired = true)]
[TimeSpanValidator(MinValueString = "0:0:00", MaxValueString = 10675199.02:48:05.4775807", ExcludeRange = false)]
public TimeSpan SequenceRolloverDOSCompare
{
    get
    {
        return (TimeSpan)base["SequenceRolloverDOSCompare"];
    }
}
Run Code Online (Sandbox Code Playgroud)

配置看起来像这样:

<SequenceRolloverPolling SequenceRolloverDOSCompare="2:00:00:00"  />
Run Code Online (Sandbox Code Playgroud)

ConfigurationErrorsException : The value of the property 'SequenceRolloverDOSCompare' cannot be parsed. The error is: 2:00:00:00 is not a valid value for TimeSpan.

或这个:

<SequenceRolloverPolling SequenceRolloverDOSCompare="48:00:00"  />
Run Code Online (Sandbox Code Playgroud)

OverflowException : The TimeSpan could not be parsed because at least one of the hours, …

c# timespan configurationsection

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

.NET Guard类库?

我正在寻找提供保护方法的库或源代码,例如检查空参数.显然这个构建起来相当简单,但我想知道.NET是否还有.谷歌的基本搜索没有透露太多信息.

.net code-contracts

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

递归LINQ调用

我正在尝试使用父子关系构建一些数据的XML树,但是在同一个表中.

这两个重要领域是

CompetitionID ParentCompetitionID

有些数据可能是

CompetitionID = 1,ParentCompetitionID = null

CompetitionID = 2,ParentCompetitionID = 1

CompetitionID = 3,ParentCompetitionID = 1

我破坏的查询只是以平面格式显示结果.看到我正在使用XML,需要某种递归功能.我可以使用普通的for循环递归来做到这一点,但是想看看linq版本.任何帮助赞赏.

var results = 
        from c1 in comps
        select new {
            c.CompetitionID,
            SubComps=
                from sc in comps.Where (c2 => c2.CompetitionID == c1.CompetitionID)
                select sc
        };
Run Code Online (Sandbox Code Playgroud)

更新

我在这里找到了一篇有趣的文章Chris Eargle ,它向您展示了如何递归调用lambda委托.这是代码.谢谢克里斯!

Func<int, int> factoral = x => x <= 1 ? 1 : x + factoral(--x);

Func<int, int> factoral = null;

factoral = x => x <= 1 ? …
Run Code Online (Sandbox Code Playgroud)

c# linq

15
推荐指数
1
解决办法
6227
查看次数

使用OWIN Ws-Federation包对ADFS 3.0进行身份验证

我有一个MVC内部网站点,需要使用AD帐户进行身份验证.

我设置ADFS 3.0(Win Server 2012 R2)并按此设置ADFS信赖方信任.

这篇文章介绍了Ws-Federation OWIN组件,我想使用它.它提到了如何连接到Azure AD,但没有关于ADFS的任何内容.

我尝试设置配置属性"MetadataAddress"和"Wtrealm"以匹配我在ADFS中配置但在运行时我收到错误:

A default value for SignInAsAuthenticationType was not found in IAppBuilder Properties. 
This can happen if your authentication middleware are added in the wrong order, or if one is missing.
Run Code Online (Sandbox Code Playgroud)

我正在寻找正确的方法删除此错误

authentication adfs owin katana

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

如何将以前的表单数据传递给FormWizard中DynamicForm的构造函数

我有一个FormWizard,我需要第一个表单中的数据传递给第二个表单的构造函数,以便我可以构建一个动态表单.

我可以通过FormWizard的process_step获取第一个表单的数据.

我使用字段列表的数据库调用创建第二个窗体的字段.

class ConditionWizardDynamicQuestions(forms.Form):

    def __init__(self, DynamicQuestions=None, *args, **kwargs):
       super(ConditionWizardDynamicQuestions, self).__init__(*args, **kwargs)
       questions = Question.objects.filter(MYDATA = DATA_FROM_1STFORM)
       for q in questions:
            dynField = FieldFactory(q)
            self.fields[q.label] = dynField
Run Code Online (Sandbox Code Playgroud)

如何通过DATA_FROM_1STFORM


我的结果代码:我放弃了表单的init,并将其切换到CreateQuestions def.然后使用向导的get_form覆盖来在创建后更改表单.

class ConditionWizard(SessionFormWizard):
    def get_form(self, request, storage, step=None, data=None, files=None):
        form = super(ConditionWizard, self).get_form(request, storage, step, data, files)
        stepIndex = self.get_step_index(request, storage, step)
        if stepIndex == 1:
            form.CreateQuestions(request.session["WizardConditionId"])
        if stepIndex == 3:
            form.fields['hiddenConditionId'].initial = request.session["WizardConditionId"]
            form.fields['medicationName'].queryset = Medication.objects.filter(condition = request.session["WizardConditionId"])
        return form
Run Code Online (Sandbox Code Playgroud)

django django-formwizard

12
推荐指数
2
解决办法
6205
查看次数

如何开始使用Microsoft PixelSense

如果我想使用Microsoft PixelSense实现一个试点项目,我在哪里或谁要求测试硬件?

wpf pixelsense

11
推荐指数
1
解决办法
1382
查看次数