我可以像在 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<Microsoft.Bing.Speech.RecognitionPhrase>
的函数编写单元测试时,我遇到以下错误:
非虚拟(在 VB 中可覆盖)成员上的设置无效:x => x.信心
读完这里,我知道这是因为该属性不是虚拟的。我一直在网站上阅读有关接口、包装器、虚拟器的信息……但没有成功。
我可以访问RecognitionPhrase [from metadata]
,它有public Confidence Confidence get;
,所以这里没有set
。我试图创建一个public interface IRecognitionPhrase
和一个public class RecognitionPhrase : IRecognitionPhrase
,但是在最后的转换中它说它不能将我的 RecognitionPhrase 转换为 Microsoft.Bing.Speech.RecognitionPhrase。
我读过一些关于反射的东西,但它似乎适用于私有设置器而不是没有设置器。
我现在没有主意了。任何方向都非常感谢(当然,如果有人已经嘲笑List<Microsoft.Bing.Speech.RecognitionPhrase>
,请评论你是怎么做到的)谢谢
我愿意使用任何其他测试框架。
【问题讨论】:
包含一个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编译器一样快速写代码快速编译运行,每次输入那么多命令感觉太慢。