gpt4 book ai didi

c# - 使用 Moq 更改参数

转载 作者:行者123 更新时间:2023-12-04 08:16:53 26 4
gpt4 key购买 nike

我有一个单元测试方法( 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
}
我想测试这个方法所以我 mock AssetInfoManager但我需要参数 deviceManager根据mock进行更改。我用过 Callback为了那个原因。 _mockAssetInfoManager模拟属性(property) 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
即使在实际代码中分配一个新变量也不会做你想做的事情。

关于c# - 使用 Moq 更改参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65668694/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com