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

l--*_*''' 2 .net c# nunit moq visual-studio

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

public virtual MessageQueue MessageQueue { get; } = new MessageQueue(ConfigHelper.QLocation);
Run Code Online (Sandbox Code Playgroud)

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

我得到这个例外:

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

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

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

Old*_*Fox 5

您正试图以QLocation静态方式使用(ConfigHelper.QLocation),因为它是非静态字段(如您所写...)

试试这个:

.... = new MessageQueue(new ConfigHelper().QLocation);
Run Code Online (Sandbox Code Playgroud)

它会删除错误.

IMO,你应该MessageQueue通过这个CUT(被测试的类)C'tor注入.你的班级依赖于MessageQueue.如果你不想注入MessageQueue我提供的注入连接字符串而不是配置.