c# - MSFakes 命名约定是否与通用类相匹配?

标签 c# unit-testing generics microsoft-fakes

我有一个名为 MyClass 的类(class),以及一个名为 MyClass<C> 的通用版本。使用假货,我想生成一个 JUST MyClass<C> 的垫片,而不是MyClass 。我最初尝试过:

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
  <Assembly Name="XXXX" Version="#.##.###"/>
  <ShimGeneration>
    <Clear/>
    <Add FullName="MyClass!"/>
  </ShimGeneration>
</Fakes>

这为 MyClass 生成了垫片,但不是MyClass<C> 。如果我改变!到 *,它确实匹配 MyClass<C> 。这让我相信我需要使用一些命名约定来匹配 MyClass<C> 。有谁知道它是什么/我可以在哪里找到它?

最佳答案

您可以使用重音符号加上该类型的泛型类型参数的数量。例如:MyClass<T>将为 1, MyClass<T,U>将为 2 等。另请参见 CLI specification 第 10.7.2 节类型名称和数量编码

您还应该添加您的命名空间作为值的一部分。

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
  <Assembly Name="XXXX" Version="#.##.###"/>
  <ShimGeneration>
    <Clear/>
    <Add FullName="MyNamespace.MyClass`1!"/>
  </ShimGeneration>
</Fakes>

关于c# - MSFakes 命名约定是否与通用类相匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46434672/

相关文章:

c# - 表达式树的转换问题

ScalaCheck 无法将 bool 值转换为 Prop 实例

unit-testing - 单元测试预期和非预期死锁行为的明智策略

c++ - 在 Eclipse 中哪里可以找到解析的 Boost.Test 输出

iOS 通用快速关闭

c# - 使用任何 UIViewController 子类作为方法的通用参数

java - 泛型和 ReadObject

c# - C++ NamedPipeClientStream 发送数据

c# - Azure 引用了错误的 DLL

c# - 具有 'normal' 接口(interface)的 WCF 异步实现