我可以像在 VS 调试器中一样模拟 List<Microsoft.Bing.Speech.Recognition Phrase> 的值吗?

Posted

技术标签:

【中文标题】我可以像在 VS 调试器中一样模拟 List<Microsoft.Bing.Speech.Recognition Phrase> 的值吗?【英文标题】:Can I mock the values of a List<Microsoft.Bing.Speech.RecognitionPhrase> just like in the VS debugger? 【发布时间】:2018-04-17 16:26:27 【问题描述】:

在为使用 List&lt;Microsoft.Bing.Speech.RecognitionPhrase&gt; 的函数编写单元测试时,我遇到以下错误:

非虚拟(在 VB 中可覆盖)成员上的设置无效:x => x.信心

读完这里,我知道这是因为该属性不是虚拟的。我一直在网站上阅读有关接口、包装器、虚拟器的信息……但没有成功。

我可以访问RecognitionPhrase [from metadata],它有public Confidence Confidence get; ,所以这里没有set。我试图创建一个public interface IRecognitionPhrase 和一个public class RecognitionPhrase : IRecognitionPhrase,但是在最后的转换中它说它不能将我的 RecognitionPhrase 转换为 Microsoft.Bing.Speech.RecognitionPhrase。

我读过一些关于反射的东西,但它似乎适用于私有设置器而不是没有设置器。

我现在没有主意了。任何方向都非常感谢(当然,如果有人已经嘲笑List&lt;Microsoft.Bing.Speech.RecognitionPhrase&gt;,请评论你是怎么做到的)谢谢

我愿意使用任何其他测试框架。

【问题讨论】:

包含一个minimal reproducible example,可以用来重现问题。 @Nkosi 恐怕我没有足够的纪律来评论我尝试过但没有成功的所有内容......我只是用另一个代码替换了一个代码。 【参考方案1】:

我终于用反射解决了它......但不是 Mock 的反射(抛出异常)

        //var mockFrase = new Mock<RecognitionPhrase>();
        //PropertyInfo propertyInfo = mockFrase.GetType().GetProperty("Confidence");
        //propertyInfo.SetValue(mockFrase, Confidence.High);

相反,对真实对象使用反射解决了我的问题:

        var frase = new RecognitionPhrase();
        PropertyInfo propertyInfo = frase.GetType().GetProperty("Confidence");
        propertyInfo.SetValue(frase, Confidence.High);

【讨论】:

以上是关于我可以像在 VS 调试器中一样模拟 List<Microsoft.Bing.Speech.Recognition Phrase> 的值吗?的主要内容,如果未能解决你的问题,请参考以下文章

VS2017 MFC 类向导 - 如何像在 VS2015 中一样使用它

像在 IDE 中一样在文本区域中反应自动完成(例如 VS Code、Atom)

Linux下怎么像在windows下的vs编译器一样快速写代码快速编译运行,每次输入那么多命令感觉太慢。

R mclapply vs foreach

可以像在 Python 中一样在 MATLAB 中进行并行遍历吗?

滑动 UIViewController 以弹出 - 就像在 Readability 应用程序中一样