小编Str*_*ior的帖子

如何使AutoMoqCustomization使用Strict MockBehavior?

将AutoFixture与AutoFixture.AutoMoq包一起使用时,我有时会发现没有配置为正确测试他们要测试的东西的测试,但由于默认(松散)模拟行为,问题从未被发现:

public interface IService
{
    bool IsSomethingTrue(int id);
}

void Main()
{
    var fixture = new Fixture()
        .Customize(new AutoMoqCustomization());
    var service = fixture.Freeze<Mock<IService>>();
    Console.WriteLine(service.Object.IsSomethingTrue(1)); // false
}
Run Code Online (Sandbox Code Playgroud)

我想让Mocks用严格的行为创建,所以我们被迫调用Setup()我们期望被调用的方法.我可以为每个单独的模拟这样做:

fixture.Customize<Mock<IService>>(c => c.FromFactory(() => new Mock<IService>(MockBehavior.Strict)));
Run Code Online (Sandbox Code Playgroud)

但是在梳理了AutoMoqCustomization()的源代码以及各种ISpecimenBuilder其他实现之后,我很遗憾只能让所有的M​​ocks用严格的行为进行初始化.该框架看起来非常灵活和可扩展,所以我确信有一种简单的方法可以做到这一点 - 我无法弄清楚如何做到这一点.

moq autofixture automoq

6
推荐指数
1
解决办法
880
查看次数

在npm库/框架下载中大幅下降.谁知道为什么?

在查看npmtrends.com时,我注意到几乎每个npm库/框架在2018年6月初的下载量都有很大下降.

有人知道为什么吗?也许npm下降或者每个人都在夏天休息一下?

在此输入图像描述

javascript node.js npm

6
推荐指数
1
解决办法
194
查看次数

linq 搜索法语字符

我是 EF 并且有一个简单的 LINQ 语句并且想要搜索单词。所以有文本框搜索和提交按钮。

当搜索文本包含"march"它时,它会找到例如。"des marchés",但如果我搜索"marché"它没有找到。所以这是法国人的性格。

listAgendaItems = dc.agenda.Where(a =>
                        a.libelle_activite.Contains(searchText)
).ToList<agenda>();
Run Code Online (Sandbox Code Playgroud)

数据库和表Agenda具有扩展属性 -> 排序规则:French_CI_AS

那么我怎样才能确保我也能得到法语单词呢?像“é,à”等

我也尝试搜索,"marche"但没有找到"marchés"

c# globalization linq-to-entities collation

5
推荐指数
1
解决办法
1692
查看次数

Java程序流程和OOP

我是一个Java新手,也是OOP的新手.我多年来一直是程序员,但现在正在努力学习OOP.当我通过在线Java课程时,我正在尝试编写一个基本的练习程序.这是一个跟踪人们游戏得分的程序.这就是我想要发生的事情:
1.询问用户的玩家数量.
2.询问球员的名字.
3.显示跟踪分数的主程序窗口.

我正在使用Swing.我的代码当前显示了上面#1的JTextField.我的想法是我在JTextField上放了一个ActionListenter,当用户点击进入时,它会获得/存储玩家的数量.这有效.但接下来的步骤是我遇到OOP问题.这是我的ActionListener的代码:

private class InputHandler implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        String enteredText = e.getActionCommand();
        numPlayers = Integer.parseInt(enteredText.trim());
    }
}
Run Code Online (Sandbox Code Playgroud)

因为我需要程序等到我有numPlayers,所以我决定实例化该类以获取ActionListener中的玩家名称.但是,由于此类是ActionListener,因此我可以/不能在那里做什么限制.我想要实例化的类称为GetPlayerNames,它只是一个扩展JFrame的公共类.我已经尝试将其置于actionPerformed(在InputHandler中):

GetPlayerNames temp = new GetPlayerNames(numPlayers);
Run Code Online (Sandbox Code Playgroud)

(我在这里使用"temp"因为我不需要对这个变量做任何事情......这只是我能让它工作的唯一方法),但当然这给了编译器警告,因为"temp"从未使用过.当然,这是一个混乱和糟糕的形式.救命?

java oop

5
推荐指数
1
解决办法
1711
查看次数

LINQ - 编写扩展方法以获取每个组具有最大值的行

我的应用程序经常需要对表进行分组,然后返回该组的最大值.在LINQ中这很容易做到:

myTable.GroupBy(r => r.FieldToGroupBy)
.Select(r => r.Max(s => s.FieldToMaximize))
.Join(
    myTable,
    r => r,
    r => r.FieldToMaximize,
    (o, i) => i)
Run Code Online (Sandbox Code Playgroud)

现在假设我想将其抽象为自己的方法.我试着写这个:

public static IQueryable<TSource>
SelectMax<TSource, TGroupKey, TMaxKey>(
    this IQueryable<TSource> source,
    Expression<Func<TSource, TGroupKey>> groupKeySelector,
    Expression<Func<TSource, TMaxKey>> maxKeySelector)
    where TMaxKey : IComparable
{
    return source
        .GroupBy(groupKeySelector)
        .Join(
            source,
            g => g.Max(maxKeySelector),
            r => maxKeySelector(r),
                (o, i) => i);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不能编译:maxKeySelector是一个表达式(所以你不能在r上调用它,你甚至无法将它传递给Max.所以我尝试重写,使maxKeySelector成为一个函数而不是一个表达式:

public static IQueryable<TSource>
SelectMax<TSource, TGroupKey, TMaxKey>(
    this IQueryable<TSource> source,
    Expression<Func<TSource, TGroupKey>> groupKeySelector,
    Func<TSource, TMaxKey> maxKeySelector)
    where TMaxKey : IComparable
{
    return …
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-sql

5
推荐指数
1
解决办法
2122
查看次数

mvc route actionlink url使用名称而不是id

我想我已经问过了,但解决方案并没有真正有意义.无论如何,我在我的观点上有这样的ActionLinks:

foreach( var item in Model){
<%: Html.ActionLink(item.Name, "Details", new {id = item.Id}) %>
}
Run Code Online (Sandbox Code Playgroud)

现在,当它进入我的行动细节显然这将是网址

/MyThings/Details/{id}
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以显示该项目的名称而不是id使用slug?或像这样修改全局asax:

/MyThings/Details/CarKeys
Run Code Online (Sandbox Code Playgroud)

事情是名称需要是唯一的,有没有办法我可以修改全局asax来显示名称而不是id?

任何建议都非常感谢!

asp.net-mvc routes global-asax asp.net-mvc-3

5
推荐指数
2
解决办法
5480
查看次数

如何将解码的json文件中的布尔值转换为小写字符串?

我正在解码的类使用字符串字段,Newtonsoft默认解码器将json文件中的布尔值转换为大写字符串。它可能会调用布尔类型的ToString(),结果为“ True”或“ False”。

void Main()
{
    var foo = JsonConvert.DeserializeObject<Foo>("{Prop:true}");
    Console.WriteLine(foo.Prop); // output: True, desired output: true
}

public class Foo
{
    public string Prop{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

由于该字段在json中可以是字符串或布尔值,因此我希望有一个自定义解码器,该解码器始终根据值将json-boolean转换为“ true”或“ false”。

任何帮助,将不胜感激。

c# json decoding json.net

5
推荐指数
1
解决办法
2778
查看次数

在C#中注册所有已声明的类的子类

在我正在研究的概念验证项目中,我有一个通用的抽象类,我期望通过许多子类扩展它:

public abstract class Pet {
    public abstract string PetTypeName {get;}
}

public class Dog : Pet {
    public override string PetTypeName { get { return "Dog"; } }
}
Run Code Online (Sandbox Code Playgroud)

我想要一个静态集合,其中包含此类的所有子类型:

public static List<Type> AllPetTypes = new List<Type> {
    typeof(Dog),
    typeof(Cat),
    //...
};
Run Code Online (Sandbox Code Playgroud)

但是,当我们想要引入一个新的子类型时,这又增加了一个步骤,并且它容易出错,因为它只是程序员在运行时忘记做的事情.如何自动创建这样的集合,包括继承给定父类的程序集中的每个类型?

编辑

作为回应做我将使用它的问题:

由于我们有多个客户端使用相同的SaaS产品,但可以访问门户网站"渠道"的不同子集,因此很难跟踪用户访问特定页面的方式,以及点击"完成"后应将其发送到何处".

因此,我正在为ASP.NET门户网站创建架构的可能性,其中每个页面实际上都是一个增强的用户控件,它接受一个特定的强类型类来保存其参数,以及跟踪面包屑,URL创建所涉及的所有任务.并将其抽象出框架.因此,框架需要知道可以像页面一样处理的所有控件.理想情况下,在框架中创建新的用户控件并使其代码隐藏类扩展某个基类就足以将该控件注册为系统中的新页面.

这让我想到了下一个问题:将使用提出的解决方案中提到的技术在给定程序集中查找类型,在ASP.NET Web项目的上下文中工作,其中类型在代码隐藏中声明?我不确定用户控件在什么时候被编译,或者它们被认为是Web项目程序集的一部分.有没有人有额外的见解?(我应该把它作为一个新问题吗?)

c# reflection

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

拦截Ninject拦截扩展中的接口方法

我正在玩Ninject Interception扩展.Ian Davis关于它的博客文章表明,拦截总是基于实际的服务类型,而不是接口.例如,以下代码将无效,因为它IFoo是一个接口:

Kernel.InterceptBefore<IFoo>(f => f.DoSomething(), 
    i => Console.WriteLine("before"));
Run Code Online (Sandbox Code Playgroud)

当然,接下来的这段代码会只有工作Foo.DoSomethingvirtual:

Kernel.InterceptBefore<Foo>(f => f.DoSomething(), 
    i => Console.WriteLine("before"));
Run Code Online (Sandbox Code Playgroud)

在涉及面向方面的编程时,这似乎是一个非常明显的漏洞.我一直非常认真地对接口进行编程,以便我们可以使用模拟框架来模拟我们的各种服务,但绝大多数实际的方法实现都不是虚拟的.如果一个模拟框架可以生成一个IFoo满足我要求的方法,那么Ninject似乎应该能够.

所以我想我的问题是双重的:

  1. 有什么理由Ninject拦截不会让你绑定到接口的方法呢?
  2. 有没有一种简单的方法可以让Ninject绑定到动态"包装器"类,这些类可以让我对所有接口方法执行某些拦截操作,然后将调用传递给真正的实现?

aop ninject-2 ninject-extensions

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

使用返回的错误消息确定是否存在错误

我最近和一个伙伴讨论过返回值只有一个含义.在我之前的工作中,我们使用C++并使用了typedef'ed wBOOL,因此0为wFALSE,1为wTRUE.建筑师说我们也可以返回2,3,4 ......以获取更多信息,我认为这是一个可怕的想法.如果我们期望wTRUE = 1且wFALSE = 0且wBOOL = {wTRUE,wFALSE},则应该避免返回任何其他内容......现在,转到今天的C#.

我最近审查了一段代码,其中有一组函数确定是否存在错误并将字符串返回给用户:

private bool IsTestReady(out string errorMessage)
{
  bool isReady = true;
  errorMessage = string.Empty;
  if(FailureCondition1)
  {
    isReady = false;
    errorMessage = FailureMessage1;
  }
  else if(FailureCondition2)
  {
    isReady = false;
    errorMessage = FailureMessage2;
  }
  //... other conditions
  return isReady;
}
Run Code Online (Sandbox Code Playgroud)

然后,使用这些功能......

private enum Tests
{ TestA, TestB, TestC }
private void UpdateUI()
{
  string error = string.Empty;
  bool isTestReady;
  switch(this.runningTest) // which test are we running (TestA, TestB, or TestC)
  {
    case …
Run Code Online (Sandbox Code Playgroud)

c# return-type

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