NUnit Mocking not working for Singleton Method(NUnit 模拟不适用于单例方法)
问题描述
请耐心等待,我是 NUnit 的新手.我来自 Rails 的土地,所以其中一些对我来说是新的.
Bear with me, I'm new to NUnit. I come from the land of Rails, so some of this is new to me.
我有一行代码如下所示:
I have a line of code that looks like this:
var code = WebSiteConfiguration.Instance.getCodeByCodeNameAndType("CATALOG_Brands_MinQty", item.Catalog);
我正在尝试模拟它,就像这样(假设 code
已经初始化):
I'm trying to mock it, like this (assume code
is already initialized):
var _websiteConfigurationMock = new DynamicMock(typeof(WebSiteConfiguration));
_websiteConfigurationMock.ExpectAndReturn("getCodeByCodeNameAndType", code);
当我调试测试时,getCodeByCodeNameAndType
返回 null
,而不是预期的 code
.我做错了什么?
When I debug the test, getCodeByCodeNameAndType
is returning null
, instead of the expected code
. What am I doing wrong?
NUnit 版本:2.2.8
NUnit version: 2.2.8
推荐答案
DynamicMock 在内存中创建一个新对象,该对象表示您要模拟的接口或可编组(从 MarshalByRef 继承)类.
A DynamicMock creates a new object in-memory that represents the interface, or marshallable (inherits from MarshalByRef) class you want to mock.
试试这个:
var _websiteConfigurationMock = new DynamicMock(typeof(WebSiteConfiguration));
_websiteConfigurationMock.ExpectAndReturn("getCodeByCodeNameAndType", code);
WebSiteConfiguration conf = (WebSiteConfiguration)_websiteConfigurationMock.MockInstance;
var x = conf.getCodeByCodeNameAndType("CATALOG_Brands_MinQty", item.Catalog);
请注意,除非 WebSiteConfiguration 从 MarshalByRef 继承,否则第三行将不起作用.
Note that the third line there will not work unless WebSiteConfiguration inherits from MarshalByRef.
您通常做的是模拟一个接口并获取一个实现该接口的新对象,但其行为方式与您配置它的方式相同,而不必为它创建具体类型,所以我不是除非您使用更好的隔离框架,例如可以拦截对现有对象中静态方法/属性的调用的 TypeMock,否则完全确定您正在做的事情会奏效.
What you typically do is mock an interface and get a new object that implements this interface, but behaves the way you've configured it to do, without having to go and make a concrete type for it, so I'm not entirely sure what you're doing is going to work unless you employ a better isolation framework, like TypeMock that can intercept calls to static methods/properties in existing objects.
这篇关于NUnit 模拟不适用于单例方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:NUnit 模拟不适用于单例方法


- 输入按键事件处理程序 2022-01-01
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- WebMatrix WebSecurity PasswordSalt 2022-01-01
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01
- 如何用自己压缩一个 IEnumerable 2022-01-01
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01