如何解决使用 Moq 更改参数
我有一个单元测试方法 (GetEnterpriseInfo
),它从类 GetAssetInfo
调用另一个方法 (AssetInfoManager
)。
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
即使在实际代码中分配一个新变量也不会做你想做的事情。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。