具有内部构造函数的最小起订量具体类

Jam*_*s B 2 c# moq .net-assembly

我正在尝试 Moq 一个具有内部构造函数的具体类,即,MyAssembly我有

public class MyClass {

    internal MyClass(){}

    // other methods including factory instance method
}
Run Code Online (Sandbox Code Playgroud)

然后在“TestAssembly”中的测试中我有

var mock = new Mock<MyClass>();
Run Code Online (Sandbox Code Playgroud)

我已将MyAssembly以下内容添加到AssemblyInfo.cs

[assembly: InternalsVisibleTo("TestAssembly")]
Run Code Online (Sandbox Code Playgroud)

但即使设置TestAssembly为 的朋友MyAssembly,Moq 仍然会抛出错误

Castle.DynamicProxy.InvalidProxyConstructorArgumentsException
Can not instantiate proxy of class: Civica.Metadata.Models.Entities.Stage.
Could not find a parameterless constructor.
Run Code Online (Sandbox Code Playgroud)

Moq 是否应该能够以这种方式使用内部构造函数创建模拟?

Owe*_*ing 5

请参阅起订量快速入门的高级功能部分

模拟另一个项目的内部类型:将以下程序集属性(通常添加到 AssemblyInfo.cs)添加到包含内部类型的项目:

// This assembly is the default dynamic assembly generated Castle DynamicProxy, 
// used by Moq. Paste in a single line. 
[assembly:InternalsVisibleTo("DynamicProxyGenAssembly2,PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")]
Run Code Online (Sandbox Code Playgroud)

  • 使用 `[ assembly:InternalsVisibleTo("DynamicProxyGenAssembly2")]` 似乎有效 (2认同)