问题标签 [foq]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
107 浏览

unit-testing - 在 Foq 中模拟具有虚拟内部可设置属性的抽象类

我已经在 F# 中编写了一个 Azure 持久函数,并且正在尝试按照https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-unit-testing上的指南编写单元测试. 我尝试使用 Foq 创建抽象类的模拟实例DurableOrchestrationContextBase,但失败并出现以下错误:

System.TypeLoadException:来自程序集'Foq.Dynamic,Version = 0.0.0.0,Culture = Neutral,PublicKeyToken = null'的类型'Mock.DurableOrchestrationContextBase1953fcc2-be15-41fc-850c-5a5813aace89'上的方法'set_InstanceId'覆盖了一个方法从该组件中看不到。

该错误与此属性有关:

进一步的调查表明,Foq 能够在抽象 C# 类上使用内部设置器模拟非虚拟、非抽象属性,但如果它们是虚拟的,则无法处理这些属性。

有没有办法在 F# 测试中模拟这样的类?在这种情况下,滚动我自己的实现会很尴尬,因为DurableOrchestrationContextBase有许多需要实现的成员的大类也是如此。