【发布时间】:2020-06-18 08:05:26
【问题描述】:
我正在尝试编写 UT 并坚持以下行。
产品代码(造成问题):
var view = RegionManager.Regions["Dummy"].ActiveViews.First() as IView;
单元测试(相关代码):
var regionManagerMock = new Mock<IRegionManager>();
var viewCollMock = new Mock<IViewsCollection>();
regionManagerMock.Setup(c => c.Regions["Dummy"].ActiveViews).Returns(viewCollMock.Object);
在执行这个 UT 时,我遇到了以下异常:
threw an exception of type 'System.NullReferenceException'
Data: {System.Collections.ListDictionaryInternal}
HResult: -2147467261
HelpLink: null
InnerException: null
Message: "Object reference not set to an instance of an object."
Source: "System.Core"
StackTrace: " at System.Linq.Enumerable.First[TSource](IEnumerable`1 source)"
TargetSite: {TSource First[TSource](System.Collections.Generic.IEnumerable`1[TSource])}
但是,我可以看到这个的价值
RegionManager.Regions["Dummy"].ActiveViews
在运行时:
{Mock<Prism.Regions.IViewsCollection:670c>.Object}
Mock: {Mock<Prism.Regions.IViewsCollection:670c>}
Mock (Castle.Proxies.IViewsCollectionProxy): {Mock<Prism.Regions.IViewsCollection:670c>}
__interceptors: {Castle.DynamicProxy.IInterceptor[1]}
__target: null
Results View: Expanding the Results View will enumerate the IEnumerable
【问题讨论】:
-
您还需要创建
IView的模拟。并为viewCollMock添加如下设置:viewCollMock.Setup(c => c.First()).Returns(iViewMock.Object)
标签: c# unit-testing moq prism