我们有一些用Delphi 7编写的遗留应用程序.多年来我们已经收到一些请求来支持这些应用程序中的自定义桌面dpi设置,但我们已经能够躲避子弹直到知道.好吧,我们不能了.
当用户设置自己的桌面说120DPI一些控制"脱落"的应用程序或延伸超过可见的是锚定到其父的右边缘的形式和具体的那些的.
如果没有心脏直视手术,我该怎么做才能预防这个问题.
我的问题和代码基于Code First Entity Framework Unit Test Examples博客文章.我正在使用SQL Compact 4.0,因此我的单元测试使用与博客文章中描述的类似的真实数据对实际数据库运行.
我想在一些表中使用默认值为我的生产数据库播种,但在运行单元测试时,我想添加其他数据并更新一些默认值.
我创建了一个自定义的Initializer类,它使用默认值为数据库设定种子.对于我的单元测试,我创建了另一个自定义初始化程序,它继承自第一个执行测试特定种子和/或修改的初始化程序:
public class NerdDinnersInitializer : DropCreateDatabaseIfModelChanges<NerdDinners>
{
protected override void Seed(NerdDinners context)
{
var dinners = new List<Dinner>
{
new Dinner()
{
Title = "Dinner with the Queen",
Address = "Buckingham Palace",
EventDate = DateTime.Now,
HostedBy = "Liz and Phil",
Country = "England"
}
};
dinners.ForEach(d => context.Dinners.Add(d));
context.SaveChanges();
}
}
public class NerdDinnersInitializerForTesting : NerdDinnersInitializer
{
protected override void Seed(NerdDinners context)
{
base.Seed(context);
var dinner = context.Dinners.Where(d …Run Code Online (Sandbox Code Playgroud) 我一直在读这个:使用虚拟时间调度测试Rx查询
我到了"使用单元测试项目"部分(大约在页面的一半)并自己尝试(使用VS2012和MSTest),但我的结果与文档中的结果不同.具体来说,我的断言失败了.
这是我的测试代码:
[TestMethod]
public void TestMethod1()
{
var scheduler = new TestScheduler();
var xs = scheduler.CreateColdObservable(
OnNext(10, 42),
OnCompleted<int>(20));
var observer1 = scheduler.CreateObserver<int>();
scheduler.Schedule(TimeSpan.FromTicks(190),
(s, t) => xs.Subscribe(observer1));
var observer2 = scheduler.CreateObserver<int>();
scheduler.Schedule(TimeSpan.FromTicks(220),
(s, t) => xs.Subscribe(observer2));
scheduler.Start();
observer1.Messages.AssertEqual(
OnNext(200, 42),
OnCompleted<int>(210));
observer2.Messages.AssertEqual(
OnNext(230, 42),
OnCompleted<int>(240));
}
Run Code Online (Sandbox Code Playgroud)
我必须做的一个改变是:
scheduler.Schedule(TimeSpan.FromTicks(190),
() => xs.Subscribe(observer1));
Run Code Online (Sandbox Code Playgroud)
成为:
scheduler.Schedule(TimeSpan.FromTicks(190),
(s, t) => xs.Subscribe(observer1));
Run Code Online (Sandbox Code Playgroud)
说实话,我没有意识到这种变化的影响(我没有在C#中编写那么久!).
以下是结果:
Assert.Fail failed.
Expected: [OnNext(42)@200, OnCompleted()@210]
Actual..: [OnNext(42)@11, OnCompleted()@21]
Run Code Online (Sandbox Code Playgroud)
我理解它的方式是我创建一个冷可观察量,它将在第10个刻度上返回值42,并且序列在第20个刻度处完成.然后,我创建和观察者订阅这个观察者,表示我希望计划从标记190开始.因此,在标记200(190 + 10)处测试值42,在标记210处测试完成时间.然而,我得到标记11和分别为21.
该文档基于V2的RTM之前,因此我不确定TestMcheduler的行为是否已在RTM中更改,或者我是否在某处犯了错误.如果有人能解释发生了什么,我会很感激.