在最近关于存根的问题中,许多答案建议使用 C# 接口或委托来实现存根,但一个答案建议使用条件编译,在生产代码中保留静态绑定。这个答案在阅读时被修改为-2,所以至少有 2 人确实认为这是一个错误的答案。也许滥用 DEBUG 是原因,或者可能使用固定值而不是更广泛的验证。但我不禁想知道:
使用条件编译是否是实现单元测试存根的不适当技术?有时?总是?
谢谢。
编辑-添加: 我想添加一个示例作为实验:
class Foo {
public Foo() { .. }
private DateTime Now {
get {
#if UNITTEST_Foo
return Stub_DateTime.Now;
#else
return DateTime.Now;
#endif
}
}
// .. rest of Foo members
}
Run Code Online (Sandbox Code Playgroud)
相比于
interface IDateTimeStrategy {
DateTime Now { get; }
}
class ProductionDateTimeStrategy : IDateTimeStrategy {
public DateTime Now { get { return DateTime.Now; } }
}
class Foo {
public Foo() : Foo(new ProductionDateTimeStrategy()) …
Run Code Online (Sandbox Code Playgroud) 所以我在WPF中制作了自己的轮播控件.我偶然发现了一个错误,并想知道是否有人知道如何解决这个问题,如方法调用或一系列方法调用或一些解决方法.这是我的旋转木马的打印屏幕:
Carousel Image http://img4.imageshack.us/img4/9599/carousele.jpg
正如你可以清楚地看到这个图像,我的鼠标指针超过按钮上写有16.但是上面写着18的按钮是一个蓝色的按钮,好像我的鼠标在那个按钮上.我还将工具提示设置为绑定到内容,工具提示说我的鼠标位于按钮上,其中包含18个.这应该是CORRECT行为,因为18是按钮z-index值.因此,上面有18的按钮应该是按钮的ON TOP,上面有16.但是,WPF没有以这种方式渲染画布,我想知道如何克服这个问题.我试过canvas.InvalidateArranage(),canvas.invalidateVisual(),canvas.UpdateLayout(),但我没有运气.画布的左侧显示它应该是什么样子,但即使z-index值正确,右侧也无法产生相同的结果,甚至这个截图证明了我的观点,这是WPF中的一个错误.