小编Dmi*_*nov的帖子

与分布式源代码控制持续集成

我想我误解了一些东西却找不到确切的东西.我用Google搜索,但没有得到这个想法.有两种流行的技术 - 持续集成和分布式源代码控制.人们以某种​​方式将它们结合起来,但我不明白如何.

AFAIK,持续集成意味着一旦您在本地测试代码,就会提交到中央存储库(推送).与此同时,分布式系统非常受欢迎,因为您可以在本地提交和提交并提交代码并使用代码,只有在您对其充满信心和满意时才将其推送给其他代码.因此,虽然它没有强制,但它鼓励不要急于推动.在我看来,每隔几个小时就不会发生CI推送的经典之作.

那么你如何以及何时将这两件事联系起来呢?或者我说的错了吗?

编辑

我读了前三个答案.感谢您的答复.我仍然感到困惑,但现在我可以更准确地提出这个问题了.

在分布式系统中,没有那么多频繁提交的愿望,然后是集中式的.那么有关于在分布式系统中发布以符合CI的频率的指南吗?它仍然是一天几次还是这个规则的另一个版本?

version-control continuous-integration

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

单元测试程序不应该做什么

这个问题是关于单元测试的程度.

我一直在编写一个典型的程序,用XML消息中的信息更新数据库.我想到了它需要的单元测试.程序根据复杂的规则插入或更新记录,从而产生许多不同的情况.起初,我决定针对每种情况测试以下几个条件:

  • 添加了必要的记录数
  • 已正确填写插入和更新记录的字段
  • 没有记录,但与上传的数据无关的更改

在我看来,第三种测试真的很有意义.但很快我发现这并不容易实现,因为你实际上需要对数据库进行快照,然后将其与修改后的数据库进行比较.我很快就开始厌倦了我需要为不同的数据库修改案例编写这样的测试,而这些测试在规范和生产代码设计方面没有多少价值和信息.

然后我想,也许,我测试的太多了?如果没有,那么如果我测试程序不会修改不相关的记录,那么为什么我不测试它:

  • 不修改其他数据库
  • 不删除磁盘上的文件
  • 不向Santa Klaus发送电子邮件?

我完全糊涂了绘制边界的地方.你会在哪里画它?

UPDATE

我的答案读了很多有用的提示和一个标记作为解决方案,因为它有更多有用的意见给我,但仍然是我不清楚如何正确测试数据库更新.测试程序不会改变太多有意义吗?如果是这样,那么有多彻底?

unit-testing

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

模拟SUT本身

有时候,我感到自己想嘲笑被测者的愿望,我知道它看起来很奇怪。

这是例子。我使用C#,但这没关系。假设您有一个班级管理一些馆藏。它有方法

public void Insert(int position, T element)
Run Code Online (Sandbox Code Playgroud)

public void Delete(int position)
Run Code Online (Sandbox Code Playgroud)

这些方法的逻辑不是很简单。除了修改集合外,它们还可以例如引发事件,订阅事件或从事件中取消订阅,获取/释放资源或执行计算。这些方法包含在检查此功能的单元测试中。

现在添加一个方法

public void Replace(int position, T element)
{
    Delete(position);
    Insert(position, element);
}
Run Code Online (Sandbox Code Playgroud)

我并不完全确定,但是对我来说,用这种方法再次测试所有这些东西是不值得的。相反,检查此方法是否真的首先调用两者是有意义的。

如果前两个方法属于另一个类或接口,那么使用现代的模拟框架将很容易。但是这些方法属于SUT。

可以做我想做的吗?如果没有,那为什么呢?这是模拟方法的意外缺陷还是设计使然。如果是第一个,是否有解决方法?如果第二,我应该如何设计和测试所描述的程序?

unit-testing mocking

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

使用提升的权限登录桌面应用程序

任务很普遍,但我对目前为止找到的解决方案并不满意.

程序必须在后台运行,定期扫描系统以查看状态更改,并在某些情况下显示通知弹出窗口给用户.该程序在Windows 7下运行.

有两个细微差别.首先,它需要提升权限(最高级别,以管理员身份运行,Windows中存在大量术语)来扫描一些受保护的系统信息.其次,它必须适用于拥有管理权限的所有用户.

以下是典型解决方案的列表以及它们不适合的原因.

  1. 将桌面应用程序放在Windows Startup文件夹中.不起作用,因为不允许指定提升的权限.默认情况下,应用程序将不会运行.充其量,如果配置文件的兼容性,每次程序运行时屏幕上都会出现UAC弹出请求.
  2. 将文件名放入注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run.同样的问题.
  3. 将任务添加到Windows计划程序并告诉使用最高运行级别.仅适用于运行任务的单个用户.其他人不会看到窗口.
  4. 写一个Windows服务.该服务可以监视用户登录并在其会话中运行桌面应用程序.没有试过这个,但读它可能,虽然很棘手.此外,服务更难调试.看起来有点矫枉过正.
  5. 编写一个Windows服务,接收来自桌面应用程序的调用,执行管理工作并将结果返回给调用者.桌面应用程序没有特权运行 该解决方案看起来非常奇怪,因为它意味着无意义的包装器服务什么都不做,除了传输请求和响应应该为所有管理任务编写.然后,服务更难调试.

这项任务看起来非常普遍,但解决方案很复杂.我误解了什么吗?有更简单的方法吗?

PS:我已经看到过这个主题具有管理权限的进程在用户登录时运行,但想知道是否有更简单的方法.

UPDATE

我发现使用Windows服务的解决方案对我的任务也不起作用.我需要访问用户的个人证书存储区.服务在一个帐户下运行,需要访问另一个帐户的证书.我还没有找到如何使用.Net加密API进行此操作并猜测由于安全策略而无法实现.我发布了我最终想出的解决方案作为这个问题的答案.

windows security uac scheduling

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

使UI元素对鼠标事件透明

我在画布中放置了很多UI元素.其中一些不应该处理鼠标事件,而它们可以重叠并覆盖必须处理鼠标事件的其他元素.当鼠标事件发生时,我希望它通过所有不应该处理它的元素来到达可能被它们覆盖的元素,但是可以处理它.有没有办法做到这一点?

我需要在Silverlight项目中执行此操作,但也对WPF解决方案感兴趣.

.net silverlight wpf xaml

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