如何使用NSubstitute Mock只读属性DefaultHostName?
使用NSubstitute Mock WebSiteData的只读属性
可以用NSubstitute实现,但需要根据WebSiteData类的具体定义选择不同方式:
如果
DefaultHostName是虚属性(或类为抽象类/接口):直接通过NSubstitute的Returns方法指定返回值即可,示例代码:var mockSite = Substitute.For<WebSiteData>(); mockSite.DefaultHostName.Returns("mocked-hostname.azurewebsites.net");如果类是密封类或属性为非虚成员:NSubstitute无法直接mock非虚成员,这时可以通过适配器模式间接实现:
- 定义对应接口抽象目标属性:
public interface IWebSiteData { string DefaultHostName { get; } } - 编写适配器类包装原
WebSiteData:public class WebSiteDataAdapter : IWebSiteData { private readonly WebSiteData _original; public WebSiteDataAdapter(WebSiteData original) => _original = original; public string DefaultHostName => _original.DefaultHostName; } - 业务代码依赖
IWebSiteData接口,mock该接口即可:var mockSite = Substitute.For<IWebSiteData>(); mockSite.DefaultHostName.Returns("mocked-hostname.azurewebsites.net");
- 定义对应接口抽象目标属性:
内容的提问来源于stack exchange,提问作者jjj
相关产品推荐
相关产品推荐

