Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 泛型方法的Moq设置未返回指定值_C#_Unit Testing_Moq - Fatal编程技术网

C# 泛型方法的Moq设置未返回指定值

C# 泛型方法的Moq设置未返回指定值,c#,unit-testing,moq,C#,Unit Testing,Moq,我有一个设置类,其中我有一个与以下通用方法的接口: T GetValue<T>(string key, bool optional = false, T defaultValue = default(T)); T GetValue(字符串键,bool optional=false,T defaultValue=default(T)); 我现在正在处理另一个使用此设置系统的部件,并使用上述方法从设置对象提取信息: Machine.BaudRate = Settings.GetVal

我有一个设置类,其中我有一个与以下通用方法的接口:

T GetValue<T>(string key, bool optional = false, T defaultValue = default(T));
T GetValue(字符串键,bool optional=false,T defaultValue=default(T));
我现在正在处理另一个使用此设置系统的部件,并使用上述方法从设置对象提取信息:

Machine.BaudRate = Settings.GetValue<int>("BAUDRATE");
Machine.ComPort = Settings.GetValue<int>("COMPORT");
Machine.BaudRate=Settings.GetValue(“波特率”);
Machine.ComPort=Settings.GetValue(“ComPort”);
我希望通过单元测试对其进行测试,因此我编写了以下内容:

Settings.Setup(s => s.GetValue<int>("BAUDRATE",It.IsAny<bool>(),It.IsAny<int>())).Returns(57600);
Settings.Setup(s => s.GetValue("COMPORT", It.IsAny<bool>(),It.IsAny<int>())).Returns(5);
Settings.Setup(s=>s.GetValue(“波特率”,It.IsAny(),It.IsAny())。返回(57600);
Setup(s=>s.GetValue(“COMPORT”,It.IsAny(),It.IsAny())。返回(5);
但是当我运行测试时,它在两个测试上都返回0。如果我放入一个回调,我可以看到回调被命中,因此设置工作正常。为什么它不返回设置中指示的值

回调示例(我有一个异常变量,我刚刚将其设置为null,以便在调试过程中打开它):

Settings.Setup(s=>s.GetValue(“COMPORT”,false,It.IsAny()).Callback(()=>ex=null)。返回(5);

我不知道为什么在我的代码中返回0,但我找到了验证输入的方法。我的输入通过我正在测试的类路由到另一个接口。因此,我可以更改该外观上的设置以验证输入:

Facade.SetupSet(f => f.BaudRate = It.IsAny<int>()).Callback((int value) => Assert.AreEqual(57600, value)).Verifiable();
Facade.SetupSet(f => f.ComPort = It.IsAny<int>()).Callback((int value) => Assert.AreEqual(5, value)).Verifiable();
Facade.SetupSet(f=>f.BaudRate=It.IsAny()).Callback((int-value)=>Assert.AreEqual(57600,value)).Verifiable();
SetupSet(f=>f.ComPort=It.IsAny()).Callback((int-value)=>Assert.AreEqual(5,value)).Verifiable();

这段代码没有问题,对我来说很好。第二种情况下不缺少泛型参数吗?@BartoszKP不需要,因为第三个签名参数定义了t(it.IsAny()),但我可以把它换成clarity@evilfish所以在第一次安装中也不需要它?@BartoszKP没有。我想我只是照着原样复制了代码。
Facade.SetupSet(f => f.BaudRate = It.IsAny<int>()).Callback((int value) => Assert.AreEqual(57600, value)).Verifiable();
Facade.SetupSet(f => f.ComPort = It.IsAny<int>()).Callback((int value) => Assert.AreEqual(5, value)).Verifiable();