NUnit模拟不适用于Singleton方法 [英] NUnit Mocking not working for Singleton Method

查看:74
本文介绍了NUnit模拟不适用于Singleton方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

与我同在,我是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模拟不适用于Singleton方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆