泛型方法的Moq设置不返回指定值

时间:2018-04-20 09:25:10

标签: c# unit-testing moq

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

T GetValue<T>(string key, bool optional = false, T defaultValue = default(T));

我正在处理使用此设置系统的另一部分,并使用上述方法从设置对象中提取信息:

Machine.BaudRate = Settings.GetValue<int>("BAUDRATE");
Machine.ComPort = Settings.GetValue<int>("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);

但是当我运行测试时,它们都返回0。如果我进行回调,我可以看到回调被击中,因此设置正常。为什么不返回设置中指示的值?

回调示例(我有一个异常变量,我只是将其设置为null,以便在调试期间中断某些内容):

Settings.Setup(s => s.GetValue("COMPORT", false,It.IsAny<int>())).Callback(() => ex = null).Returns(5);

1 个答案:

答案 0 :(得分:0)

我不知道为什么在我的代码中我得到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();