创建更可测试的代码,同时避免静态/非静态字段初始化器问题

时间:2016-04-04 21:44:21

标签: c# .net visual-studio nunit moq

我将非静态字符串传递给MessageQueue:

public virtual MessageQueue MessageQueue { get; } = new MessageQueue(ConfigHelper.QLocation);

QLocation 是非静态的;但是, MessageQueue 需要一个静态参数。

我得到了这个例外:

  

无法访问静态上下文中的非静态字段

我的 ConfigHelper 类是我的配置文件值的包装器。我可以使ConfigHelper类静态;然而,这会使测试变得更加困难。

有没有办法解决这个问题,同时仍然保持代码可测试性?

1 个答案:

答案 0 :(得分:5)

您尝试以静态方式使用QLocationConfigHelper.QLocation),而它是非静态字段(正如您所写的那样......)

试试这个:

.... = new MessageQueue(new ConfigHelper().QLocation);

它会删除错误。

IMO,你应该通过这个CUT(被测试的课程)C注射MessageQueue。您的班级与MessageQueue有依赖关系。 如果您不想注入MessageQueue我提供注入连接字符串而不是配置。