使用 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

即使在实际代码中分配一个新变量也不会做你想做的事情。