C# 使用最小起订量改变参数
我有一个单元测试的方法(C# 使用最小起订量改变参数,c#,visual-studio,moq,mstest,C#,Visual Studio,Moq,Mstest,我有一个单元测试的方法(GetEnterpriseInfo),它从类AssetInfo管理器调用另一个方法(GetAssetInfo) private EnterpriseInfo GetEnterpriseInfo() { //some code //assetInfoManager is a public property, deviceManager and enterprise are local variables assetInfoManager.GetAs
GetEnterpriseInfo
),它从类AssetInfo管理器
调用另一个方法(GetAssetInfo
)
private EnterpriseInfo GetEnterpriseInfo()
{
//some code
//assetInfoManager is a public property, deviceManager and enterprise are local variables
assetInfoManager.GetAssetInfo(deviceManager, enterprise);
//some code
}
我想测试这个方法,所以我模拟了AssetInfoManager
,但我需要根据模拟更改参数deviceManager
。我使用了Callback
<代码>\u mockAssetInfoManager是上述代码中属性assetInfoManager
的模拟
_mockAssetInfoManager.Setup(x => x.GetAssetInfo(It.IsAny<IDeviceManager>(), It.IsAny<EnterpriseInfo>()))
.Callback((IDeviceManager deviceManager, EnterpriseInfo enterpriseInfo) =>
{
//_deviceManagerGlobal is private global variable
_deviceManagerGlobal= new DeviceManager
{
DeviceName = "Test Device"
};
deviceManager = _deviceManagerGlobal;
})
.Returns(_assetInfoList); //_assetInfoList is private global variable
我的要求是在
回调
中将其更改为模拟值。是否可能?使用回调来填充传递到模拟中的参数的所需成员
_mockAssetInfoManager
.Setup(x => x.GetAssetInfo(It.IsAny<IDeviceManager>(), It.IsAny<EnterpriseInfo>()))
.Callback((IDeviceManager deviceManager, EnterpriseInfo enterpriseInfo) => {
deviceManager.DeviceName = "Test Device";
})
.Returns(_assetInfoList); //_assetInfoList is private global variable
\u mockAssetInfoManager
.Setup(x=>x.GetAssetInfo(It.IsAny(),It.IsAny())
.Callback((IDeviceManager设备管理器,EnterpriseInfo EnterpriseInfo)=>{
deviceManager.DeviceName=“测试设备”;
})
.返回(_assetInfoList)//_assetInfoList是私有全局变量
即使在实际代码中,分配一个新变量也不会执行您试图执行的操作。设备管理器是在被测对象内注入还是创建的?未知变量太多,无法更好地理解实际问题。如果你能用a重新格式化这个问题,那就太棒了,这样我们就可以更清楚地了解当前的问题以及你到底想做什么?@Nkosi谢谢你的评论,我已经用一些变量的信息更新了这个问题。使用回调来填充传递到模拟中的参数的所需成员。即使在实际的代码中,分配一个新变量也不会执行您试图执行的操作。@lmad如果您模拟了
GetAssetInfo
,那么它的调用参数是什么又有什么关系呢?@PeterCsala实际上这是一个在代码中更改的引用变量。我需要那个更新的值。得到了答案,多亏了汉克斯,它成功了。我们需要给同一个对象赋值,而不是创建新的:)基本引用变量behavior。
_mockAssetInfoManager
.Setup(x => x.GetAssetInfo(It.IsAny<IDeviceManager>(), It.IsAny<EnterpriseInfo>()))
.Callback((IDeviceManager deviceManager, EnterpriseInfo enterpriseInfo) => {
deviceManager.DeviceName = "Test Device";
})
.Returns(_assetInfoList); //_assetInfoList is private global variable