小编ced*_*edd的帖子

jshint的实用和广泛认可的设置

我们刚刚开始使用JSHint/JSLint,并且正在寻找一些被广泛认为是严格和实用之间的良好折衷的"最佳实践"类型设置.我在互联网上看了一眼,却找不到任何东西.

我意识到这完全归功于个人意见,但我认为现在已形成某种共识.例如,有人知道jquery,google,yahoo等代码是什么?

谢谢.

jslint jshint

18
推荐指数
1
解决办法
3102
查看次数

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

单元测试循环复杂但其他微不足道的计算

假设我有一个计算器类主要功能是执行以下操作(此代码已简化以使讨论更容易,请不要评论它的样式)

double pilingCarpetArea = (hardstandingsRequireRemediation = true) ? hardStandingPerTurbineDimensionA * hardStandingPerTurbineDimensionB * numberOfHardstandings * proportionOfHardstandingsRequiringGroundRemediationWorks : 0;

double trackCostMultipler;
if (trackConstructionType = TrackConstructionType.Easy) trackCostMultipler = 0.8
else if (trackConstructionType = TrackConstructionType.Normal) trackCostMultipler = 1
else if (trackConstructionType = TrackConstructionType.Hard) trackCostMultipler = 1.3
else throw new OutOfRangeException("Unknown TrackConstructionType: " + trackConstructionType.ToString());

double PilingCostPerArea = TrackCostPerMeter / referenceTrackWidth * trackCostMultipler;
Run Code Online (Sandbox Code Playgroud)

我应该测试至少7条通过这个类的路由,trackCostMultiplier和hardstandingsRequireRemediation(6种组合)和异常条件的组合.我可能还想添加一些除以零和溢出等等,如果我感觉很敏锐.

到目前为止,我可以轻松,时尚地测试这些组合.实际上,我可能相信乘法和加法不太可能出错,因此只需要对trackCostMultipler进行3次测试,为hardstandingsRequireRemediation进行2次测试,而不是测试所有可能的组合.

然而,这是一个简单的案例,我们的应用程序中的逻辑很可能在环境上比这复杂得多,因此测试的数量可能会增长很多.

有一些方法可以解决这种复杂性

  1. 将trackCostMultipler计算提取到同一类中的方法

这是一件好事,但它不能帮助我测试它,除非我公开这个方法,这是"生产中的测试逻辑"的一种形式.我经常以实用主义的名义这样做,但如果可以,我想避免.

  1. 将trackCostMultipler计算推迟到另一个类

如果计算足够复杂,这似乎是一件好事,我可以轻松地测试这个新类.但是我刚刚对原始类的测试更加复杂,因为我现在想要传递某种类型的ITrackCostMultipler"Test Double",检查它是否使用正确的参数调用,并检查它的返回值是否被使用正确.当一个类有十个子计算器时,它的单元/积分测试变得非常大并且难以理解.

我同时使用(1)和(2),他们给了我信心,他们使调试更快.然而,肯定存在缺点,例如生产中的测试逻辑和模糊测试.

我想知道其他人测试循环复杂代码的经验是什么?有没有办法做到这一点没有缺点?我意识到测试特定子类可以解决(1),但这对我来说似乎是一种遗留技术.也可以操作输入,以便计算的各个部分返回0(用于加法或减法)或1(用于乘法或除法)以使测试更容易,但这只能让我到目前为止.

谢谢

土木工程拓展署

unit-testing test-double

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

指定要添加到 .csproj 文件中的 nuget 包的文件

我正在从一些代码创建一个 nuget 包,但还需要使用该包部署一些工具。

在 .nuspec 文件中,我可以使用该<files>元素执行此操作,这一切都运行良好。

但是,当使用 .nuspec 文件时,packageReferences不包含 csproj 文件中的 ,并且在手动包含它们(使用元素<dependencies>)时我发现了一些问题。

创建的包似乎也总是恢复为 .net 框架包,即使它的目标是 .net,如这个问题中所示。

我希望如果我转而使用 .csproj 格式来指定 nuget 包详细信息,所有这些问题都会消失,但阅读文档后我无法找到如何做到这一点。

有谁知道它是如何完成的?

如果没有,任何人都可以阐明如何从 .nuspec 文件创建 .net Framework/.net core nuget 包,以恢复到正确的目标版本并尊重包依赖性?

.net c# nuget nuspec .net-standard

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

Moq和反射,将动态生成的表达式树/ lambda传递给moq

是否可以编写如下代码。我正在尝试将Moq与作为测试框架一部分反映的对象一起使用。下面的代码从Moq引发了一个“未处理的表达式类型:'Goto'”异常,我想这是与众不同的。看起来应该可以工作!

    private void button1_Click(object sender, EventArgs e)
    {
        Ifoo  = foo Foo();

        // Create input parameter for lambda
        ParameterExpression value = Expression.Parameter(typeof(IFoo), "value");

        // create return statement for lambda
        Expression setupProperty = Expression.Return(Expression.Label(), Expression.Property(value, "Bar"), typeof(string));

        // convert expression to lambda (should now be the equivalent of "v => v.Bar")
        var func = Expression.Lambda<Func<IFoo, string>>(setupProperty, value);//.Compile();
        //string s = func(foo); // this bit works fine in .Compile() is included

        var mockFoo = new Mock<IFoo>();

        mockFoo.SetupProperty(func); // exception thrown by moq …
Run Code Online (Sandbox Code Playgroud)

c# reflection moq

3
推荐指数
1
解决办法
2199
查看次数

Elm简写为Union Type提供类型变量

我有这样的榆树类型

type ValueAndContext valueType contextType
    = ValueAndContext valueType contextType
Run Code Online (Sandbox Code Playgroud)

我想创建一个具有特定类型参数的新类型,以保存键盘点击和屏幕像素,也许是这样

type IntWithStringContext = ValueAndContext Int String
Run Code Online (Sandbox Code Playgroud)

我可以创建一个这样的类型别名,但它需要我引入一个额外的变量来保存类型,所以不保存那么多的水龙头或像素.

type alias IntWithStringContext =
  { update: ValueAndContext Int String }
Run Code Online (Sandbox Code Playgroud)

我认为榆树没有其他任何可能,但欢迎任何想法.

elm

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