使用 Moq 更改参数
Change parameter using Moq
我有一个单元测试方法 (GetEnterpriseInfo
),它从 class AssetInfoManager
.
调用另一个方法 (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
。 _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
我能够从测试中看到 _deviceManagerGlobal
变化,但是当我调试实际代码时,我没有看到 deviceManager
在线变化
assetInfoManager.GetAssetInfo(deviceManager, enterprise);
我的要求是将其更改为 Callback
中的模拟值。可能吗?
使用回调来填充传递到模拟中的参数的所需成员。
_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
即使在实际代码中分配一个新变量也不会做你想做的事情。
我有一个单元测试方法 (GetEnterpriseInfo
),它从 class AssetInfoManager
.
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
。 _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
我能够从测试中看到 _deviceManagerGlobal
变化,但是当我调试实际代码时,我没有看到 deviceManager
在线变化
assetInfoManager.GetAssetInfo(deviceManager, enterprise);
我的要求是将其更改为 Callback
中的模拟值。可能吗?
使用回调来填充传递到模拟中的参数的所需成员。
_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
即使在实际代码中分配一个新变量也不会做你想做的事情。