【问题标题】:Can I mock the values of a List<Microsoft.Bing.Speech.RecognitionPhrase> just like in the VS debugger?我可以像在 VS 调试器中一样模拟 List<Microsoft.Bing.Speech.Recognition Phrase> 的值吗?
【发布时间】: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 恐怕我没有足够的纪律来评论我尝试过但没有成功的所有内容......我只是用另一个代码替换了一个代码。

标签: moq voice-recognition microsoft-cognitive bing-speech


【解决方案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);

【讨论】:

    猜你喜欢
    • 2016-12-09
    • 2018-04-19
    • 1970-01-01
    • 2011-06-19
    • 2011-01-06
    • 1970-01-01
    • 2018-12-27
    • 2010-12-30
    • 1970-01-01
    相关资源
    最近更新 更多