小编Jam*_*ory的帖子

使用Monit而不是基本的Upstart设置有什么好处?

我正在配置我的服务器以运行node.js作为守护进程.我已经设置了Upstart来处理节点的启动和关闭,这非常有效.下一步是确保node.js在它死亡时重新启动.一些指南建议使用Monit(或Fugue)来监控进程(在Monit的情况下,通过向服务器发出HTTP请求并等待响应).

我很高兴能使用类似或monit的赋格曲,但我不知道为什么人们不(或不能),只要用暴发户的重生功能.我假设Upstart将监视启动过程的PID,如果它死了就再次启动它.Monit或Fugue给你的Upstart不是什么?

deployment upstart monit node.js

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

测试与外部服务的交互

先决条件:我正在使用Play的最新版本!框架和Java版本(不是Scala).

我需要在创建用户时将消息发布到消息队列,并且我想测试该行为.我的问题是让这个很容易测试.

控制器方法

在其他框架中,我将要做的是在控制器中使用构造函数注入并在我的测试中传入一个模拟队列; 然而,玩Play!控制器是静态的,这意味着我new MyController(mockedQueue)在测试中无法做到.

我可以使用Google Guice并@Inject在我的控制器中的静态字段上添加注释,但这对我来说并不是很好,因为它或者意味着我必须将该字段公开以在测试中被替换,或者我必须在我的测试中使用容器.我更喜欢使用构造函数注入,但玩!似乎不方便.

模型方法

通常说你的逻辑应该在你的模型中,而不是你的控制器.那讲得通; 但是,我们在这里不是Ruby,让你的实体与外部服务(电子邮件,消息队列等等)进行交互的可测试性远远低于动态环境,在这种环境中你可以MessageQueue随意用模拟实例替换静态调用.

如果我让我的实体调用队列,那怎么可测试?

当然,如果我进行端到端的集成测试,这两种情况都是不必要的,但我不需要为我的测试运行而调整消息队列或SMTP服务器.

所以我的问题是:我如何模拟我的游戏!控制器和/或模型,以促进测试与外部服务的交互?

java testing unit-testing playframework

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

使用Ruby替换运行时实现

Ruby中的依赖注入框架几乎被宣布为不必要的.Jamis Buck去年在他的LEGO,Play-Doh和Programming博客文章中写到了这一点.

普遍接受的替代方案似乎是使用某种程度的构造函数注入,但只是提供默认值.

class A
end

class B
  def initialize(options={})
    @client_impl = options[:client] || A
  end

  def new_client
    @client_impl.new
  end
end
Run Code Online (Sandbox Code Playgroud)

这种方法对我来说很好,但似乎缺少更传统的设置:在运行时基于某些外部开关替换实现的方法.

例如,使用依赖注入框架,我可以做这样的事情(pesudo-C#):

if (IsServerAvailable)
  container.Register<IChatServer>(new CenteralizedChatServer());
else
  container.Register<IChatServer>(new DistributedChatServer());
Run Code Online (Sandbox Code Playgroud)

此示例仅IChatServer根据我们的中央服务器是否可用来注册不同的实现.

由于我们仍然只是在Ruby中使用构造函数,因此我们没有对所使用的依赖项进行编程控制(除非我们自己指定每个依赖项).Jamis提供的示例似乎非常适合使类更易于测试,但似乎缺少替换设施.

我的问题是,你是如何在Ruby中解决这种情况的?我愿意接受任何答案,包括"你根本不需要这样做".我只是想了解Ruby对这些问题的看法.

ruby dependency-injection

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

.Net Profiling API方法

我有一种感觉,我可能已经知道这个问题的答案,但无论如何我都会问.

有没有更好的方法来使用.Net Profiling API而不是COM/Managed C++路由?

我不愿意遵循建议的COM方法是这样的:

  • 努力,开始时需要做很多工作
  • 不喜欢连接C++ dll所涉及的魔法,不容易通过项目重新分配
  • 感觉难以进行单元测试
  • 不想在C++中行为.我可以创建一个互操作层,但这更有用
  • 很难调试.从我收集到的内容中,您无法将调试器附加到实际的C++层,因此您将返回日志文件等

我遇到了一个名为NProf的项目,它试图用管理层包装API.不幸的是,它自2003年以来一直没有更新.

有没有人有任何可能有帮助的线索?这一切都感觉有点讨厌.

澄清:

  • 这描述了我所指的API:Profiling API
  • 我正在使用Visual Studio 2008和框架的v3.5

.net profiling

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

如何删除分支及其引用的所有对象

问题是,在删除和推送分支后,它不会永远丢失,它仍然存储在存储库中.我删除了大量不必要文件的分支,但只要它仍然在git存储库中的某个地方,git clone命令持续时间太大了.

现在我唯一看到的方法是删除整个存储库并重新创建它,但没有不必要的分支.

git

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

使用FakeItEasy中的预先存在的值来存取参数

这有点奇怪.我试图存根一个有参数的方法,我不关心参数是什么,所以我忽略了参数.它看起来像这样:

List<Foo> ignored;
A.CallTo(() => fake.Method(out ignored))
  .Returns(something);
Run Code Online (Sandbox Code Playgroud)

当调用stubbed方法时,这样工作没有任何问题:

List<Foo> target;
var result = service.Method(out target);
Run Code Online (Sandbox Code Playgroud)

但是,在target预先初始化时它不起作用.例如:

List<Foo> target = new List<Foo>();
var result = service.Method(out target);
Run Code Online (Sandbox Code Playgroud)

当我检查Tag假的时,我可以看到out参数被记录为,<NULL>所以我怀疑当out目标已经设置为某些东西时它们不匹配.我已经尝试ignored在我的测试中设置new List<Foo>()并尝试A<List<Foo>>.Ignored但是对结果都没有任何影响.

所以我的问题是,如果out参数目标已经有值,有没有人知道如何使用out参数存根方法?

c# fakeiteasy

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

WPF:直接绑定到控件

我需要将a的属性UserControl直接绑定到另一个控件,而不是该控件上的任何特定属性.实现这一目标的最佳方法是什么?我尝试了各种Binding属性组合无济于事.

对于某些上下文,它UserControl具有一个Next属性,用于指定导航层次结构中下一个控件; 它类似于TabIndex上下文敏感的导航.

<c:MyControl x:Name="First" Next="{Binding ???}" />
<c:MyControl x:Name="Second" />
Run Code Online (Sandbox Code Playgroud)

通过阅读文档,我认为我应该能够做到:{Binding Source=Second, BindsDirectlyToSource=True}但是那不起作用.

.net wpf binding

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

为什么Fluent NHibernate会将C#String属性中的Text字段始终创建为DEFAULT?

我在这里运行这个示例:https://github.com/jagregory/fluent-nhibernate/blob/master/src/Examples.FirstProject/Program.cs

String类型的所有C#属性都映射到TEXT sql字段而不是

nvarchar OR varchar,除了它作为DEFAULT设置.

我怎么能改变呢?

我知道我可以这样做:

Map(x => x.Name).CustomSqlType("nvarchar").Length(50); // does not work !!!
Map(x => x.Name).CustomSqlType("nvarchar (50)"); // does work !!!
Run Code Online (Sandbox Code Playgroud)

但我不想改变每个领域......

更新:...因此我可以通过=>进行自定义约定

我要做的是编写一个自定义的公约类,如:

public class ColumnStringToNVarCharConvention : IPropertyConvention, IPropertyConventionAcceptance
    {
        public void Apply(IPropertyInstance instance)
        {
            instance.CustomSqlType("nvarchar");
        }

        public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
        {
            criteria.Expect(x => x.Property.GetType().Equals(typeof(string)));
        }
    }
Run Code Online (Sandbox Code Playgroud)

有人可以正确上述代码吗?我测试了它,它没有用,为什么...

convention sqlite string text fluent-nhibernate

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

nodejs,mongodb - 如何操作来自多个查询的数据?

我一般都是JS的新手,但我试图从MongoDB中查询一些数据.基本上,我的第一个查询检索具有指定会话ID的会话的信息.第二个查询对位于指定位置附近的文档执行简单的地理查询.

我正在使用mongodb-native javascript驱动程序.所有这些查询方法都在回调中返回结果,因此它们是非阻塞的.这是我烦恼的根源.我需要做的是检索第二个查询的结果,并创建一个包含所有返回文档的sessionIds数组.然后我将把它们传递给一个函数.但是,我无法生成此数组并在回调之外的任何位置使用它.

有谁知道如何正确地做到这一点?

db.collection('sessions', function(err, collection) {
  collection.findOne({'sessionId': client.sessionId}, function(err, result) {
    collection.find({'geolocation': {$near: [result.geolocation.latitude, result.geolocation.longitude]}}, function(err, cursor) {
      cursor.toArray(function(err, item) {

      console.log(item);
    });
  });
});
Run Code Online (Sandbox Code Playgroud)

javascript mongodb node.js

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