C# 模拟UnityContainer注册表类型会导致系统不支持异常
您好,我很难模拟IUnityContainer,特别是我正在尝试查看是否调用了寄存器类型。这是我尝试测试的方法:C# 模拟UnityContainer注册表类型会导致系统不支持异常,c#,unit-testing,unity-container,moq,mstest,C#,Unit Testing,Unity Container,Moq,Mstest,您好,我很难模拟IUnityContainer,特别是我正在尝试查看是否调用了寄存器类型。这是我尝试测试的方法: private readonly IUnityContainer _container; public InjectorContainer(IUnityContainer container) { _container = container; } public void RegisterType(InjectorServi
private readonly IUnityContainer _container;
public InjectorContainer(IUnityContainer container)
{
_container = container;
}
public void RegisterType(InjectorServiceModel dependencyService)
{
_container.RegisterType(dependencyService.From, dependencyService.To);
}
这是我的统一测试课:
private Mock<IUnityContainer> _unitContaineMock;
private InjectorContainer _injectorContainer;
[TestInitialize]
public void Initializer()
{
_unitContaineMock = new Mock<IUnityContainer>();
_injectorContainer = new InjectorContainer(_unitContaineMock.Object);
}
[TestMethod]
public void RegisterType_CheckIfContainerRegisterTypeIsCalled_Oance()
{
//Arrange
var injectorServiceModel = new InjectorServiceModel()
{
From = typeof(IInjectorContainerFake),
To = typeof(InjectorContainerFake)
};
bool wasCalled = false;
_unitContaineMock.Setup(x => x.RegisterType(It.IsAny<Type>(), It.IsAny<Type>())).Callback(() =>
{
wasCalled = true;
});
//Act
_injectorContainer.RegisterType(injectorServiceModel);
//Assert
Assert.IsTrue(wasCalled);
}
private Mock\u unitContaineMock;
私人注射剂容器\u注射剂容器;
[测试初始化]
公共无效初始值设定项()
{
_unitContaineMock=new Mock();
_injectorContainer=新的injectorContainer(\u unitContaineMock.Object);
}
[测试方法]
公共无效注册表类型\u CheckIfContainerRegisterTypeIsCalled\u Oance()
{
//安排
var injectorServiceModel=新injectorServiceModel()
{
From=类型(IInjectorContainerFake),
To=类型(InjectorContainerFake)
};
布尔被称为=假;
_unitContaineMock.Setup(x=>x.RegisterType(It.IsAny(),It.IsAny())。回调(()=>
{
wascall=true;
});
//表演
_injectorContainer.RegisterType(injectorServiceModel);
//断言
Assert.IsTrue(被称为Assert.IsTrue);
}
这种状态下的代码实际上是我的第二次尝试,我第一次尝试这样做:
[TestMethod]
public void RegisterType_CheckIfContainerRegisterTypeIsCalled_Oance()
{
//Arrange
var injectorServiceModel = new InjectorServiceModel()
{
From = typeof(IInjectorContainerFake),
To = typeof(InjectorContainerFake)
};
//Act
_injectorContainer.RegisterType(injectorServiceModel);
//Assert
_unitContaineMock.Verify(x => x.RegisterType(It.IsAny<Type>(), It.IsAny<Type>()), Times.Once);
}
[TestMethod]
公共无效注册表类型\u CheckIfContainerRegisterTypeIsCalled\u Oance()
{
//安排
var injectorServiceModel=新injectorServiceModel()
{
From=类型(IInjectorContainerFake),
To=类型(InjectorContainerFake)
};
//表演
_injectorContainer.RegisterType(injectorServiceModel);
//断言
_验证(x=>x.RegisterType(It.IsAny(),It.IsAny()),Times.Once);
}
在这两种情况下,我都会得到一个SystemNotSupported异常,该异常包含以下消息:
对非虚拟(在VB中可重写)成员的验证无效:x=>
x、 RegisterType(It.IsAny(),It.IsAny(),new[]{})
从这里我能理解的是,当它试图寻找一个带有3个参数的RegisterType时,它似乎在寻找一个RegisterType
有人知道我做错了什么吗
我正在尝试测试是否调用了RegisterType。我99%确定您之所以会得到这种结果,是因为您正在调用的
RegisterType
重载实际上是在别处定义的扩展方法,并且您不能对扩展方法使用Setup/Verify(因为它们在技术上是静态的)。我是基于IUnityContainer
的方法列表的。界面上实际定义的唯一的RegisterType
,如您所见,它包含五个参数
可能的解决办法: