小编Joh*_*lph的帖子

Assert.Inconclusive的用法

我想知道有人应该如何使用Assert.Inconclusive().

我正在使用它,如果我的单元测试即将失败的原因不是测试的原因.

例如,我在类上有一个方法来计算int数组的总和.在同一个类中,还有一种计算元素平均值的方法.它通过调用sum并将其除以数组的长度来实现.

为Sum()编写单元测试很简单.但是,当我为Average()编写测试时,Sum()失败,那么Average()也可能失败.

平均值的失败并不清楚它失败的原因; 它失败的原因不是它应该测试的原因.这就是为什么我会检查Sum()是否返回正确的结果,否则我是Assert.Inconclusive().

这被认为是好习惯吗?什么是Assert.Inconclusive用于?或者我应该通过隔离框架来解决前面的例子?

.net tdd assert mocking stub

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

Mercurial:TortoiseHg从命令行"重命名"?

是否有任何hg功能来模仿TortoiseHG的"guess renames"命令?

我真的很喜欢这个,但我目前正在使用MacOS并且有Murky或命令行界面.

macos mercurial rename

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

正确应用开源许可证

我的问题包含多个内在相关的问题,我为此道歉.我尝试将它分开一点,但我会继续重复自己.

  1. 将开源许可证应用于我的知识产权代码库到底需要什么?
  2. 许多开源项目在根目录中的某处包含许可证的完整副本,但也有某种文件头,包括许可证描述,免责声明和版权声明.这是真的有必要还是取决于许可证类型?
  3. 如果其他人对此文件进行了更改,是否还需要在版权声明中对其进行命名?

licensing open-source

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

iPhone Landscape常见问题和解决方案

这里有很多混淆和一组相应的问题,以及如何实现适当处理横向/纵向模式自动旋转的iPhone应用程序.当期望以横向模式开始时,实现这种应用尤其困难.最常见的观察效果是扰乱的布局和屏幕上不再识别触摸的区域.

对标记的问题进行简单搜索iphonelandscape揭示在某些情况下发生的这些问题:

已经提出了一组不同的解决方案,其中一些包括通过CoreGraphics完全自定义动画,而其他解决方案则建立在从主笔尖加载的第一个视图控制器始终显示正确的观察的基础上.

我花了大量时间研究这个问题,最后找到了一个解决方案,它不仅是一个部分解决方案,而且应该在所有这些情况下都能正常工作.我打算在这篇CW帖子中为其他在横向模式下遇到UIViewControllers问题的人提供常见问题解答.

请提供反馈,并通过纳入任何相关的观察结果来帮助提高本职位的质量.如果您知道,可以随意编辑和发布其他/更好的答案.

iphone landscape orientation uiviewcontroller

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

在构建服务器上使用ramdisk是否明智?

在我的公司,我们目前正在研究加速CI构建的各种策略.我们已经对我们的构建进行了分析,并确定我们受到I/O瓶颈的限制.我们有相当多的选项来处理那些在不久的将来(约1-2个月),但真的想看到的改进现在.

我建议使用ramdisk作为checkout和buildfile位置.构建输出和日志当然会存储在物理磁盘上.

这是一个明智的做法,或者这种方法有明显的缺点吗?我不是在寻找关于硬件方面的答案,而是寻找常见构建系统(例如MSBuild)和ramdisk之间的交互会导致任何问题,以及是否还有其他风险需要注意的问题.

continuous-integration build-process build

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

在所有空格处拆分字符串

我需要在所有空格中分割一个字符串,它应该只包含单词本身.

我怎么能在vb.net中这样做?

标签,换行符等必须全部拆分!

这已经困扰了我很长一段时间,因为我的语法高亮显示我完全忽略了除第一行之外的每一行中的第一个单词.

.net vb.net

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

F#收益!operator - 实现和可能的C#等价物

我正在学习F#,我真的很喜欢yield!(yield-bang)运算符.不仅因为它的名字,而且它当然也是它的作用.

yield!操作者基本上可以让你产生序列的所有元素从一个序列的表达.这对于编写枚举器很有用.由于我经常遇到大而复杂的调查员,我对策略很感兴趣,我们可以用它来分解它们,并从简单的枚举器中编写它们.

不幸的是,yield!C#中没有运营商.据我了解,它的作用就像一foreach (var x in source) yield x;本书,但我正在阅读的书(Petricek的真实世界F# - Manning)表明它有更好的表现......

  • 那么F#编译器到底在做什么呢?(是的,我也可以使用Reflector来查看它,但我希望对机制有更详细的描述).

为了在C#中实现类似的构造,我已经探索了多种方式,但是它们都没有像yield!运算符那样简洁,我也不确定它们的复杂性.如果我的BigO号码正确,有人可以提供输入吗?

  • 将枚举器分解为多个私有枚举器,然后从公共枚举器中生成每个元素:

    foreach (var x in part1()) yield x
    foreach (var x in part2()) yield x
    
    Run Code Online (Sandbox Code Playgroud)

    这将有效地导致每个元素的"双倍收益".那是O(2n)吗?(或者可能更糟?)无论如何,使用这种方法阻止我使用yield break;我的任何子部分.

  • 将枚举器分解为多个私有枚举器,然后从公共枚举器中连接所有私有枚举器:

    return part1().Concat(part2())
    
    Run Code Online (Sandbox Code Playgroud)

    我相信这与上述解决方案没有什么不同,因为它Concat()是按照我上面概述的方式实现的.

还有其他选择吗?

c# ienumerable f# yield enumerators

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

IDisisposable应该级联应用吗?

这是一个相当基本的问题,但我仍然在努力解决它.

当您希望在对象最终被垃圾收集之前允许对象的用户释放底层资源(例如套接字等)时,实现IDisposable.

当我有一个持有DbConnection(实现IDisposable)的类时,我的类是否也需要实现IDisposable并将调用链接到DbConnection或它拥有的任何其他IDisposable对象?否则,只有当我的类是GarbageCollected时才会释放DbConnections资源,从而删除它对连接的引用,GC将完成DbConnection.

.net c# idisposable

14
推荐指数
2
解决办法
865
查看次数

为什么CLR允许改变盒装的不可变值类型?

我有一种情况,我有一个简单的,不可变的值类型:

public struct ImmutableStruct
{
    private readonly string _name;

    public ImmutableStruct( string name )
    {
        _name = name;
    }

    public string Name
    {
        get { return _name; }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我打开这个值类型的实例时,我通常会期望当我执行unbox时,我装箱的内容会相同.令我惊讶的是,事实并非如此.使用Reflection有人可以通过重新初始化其中包含的数据来轻松修改我的盒子的内存:

class Program
{
    static void Main( string[] args )
    {
        object a = new ImmutableStruct( Guid.NewGuid().ToString() );

        PrintBox( a );
        MutateTheBox( a );
        PrintBox( a );;
    }

    private static void PrintBox( object a )
    {
        Console.WriteLine( String.Format( "Whats in the box: {0} :: {1}", ((ImmutableStruct)a).Name, a.GetType() ) );
    } …
Run Code Online (Sandbox Code Playgroud)

.net c# clr boxing system.reflection

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

编译器魔术:为什么?

我刚才注意到给出以下代码:

if (x.ID > 0 && !x.IsCool)
Run Code Online (Sandbox Code Playgroud)

Microsoft C#3.0(VS2008 SP1)编译器将优化它:

if (!((x.Id <= 0) || x. IsCool))
Run Code Online (Sandbox Code Playgroud)

这是在启用优化的Debug构建中.为什么编译器会这样做?它在执行方面更快吗?

我用Reflector找到了(我实际上是在寻找不同的东西)

c# compiler-construction optimization

11
推荐指数
3
解决办法
1132
查看次数