Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何配置NSubstitute不调用内部虚拟方法_C#_Unit Testing_Nsubstitute - Fatal编程技术网

C# 如何配置NSubstitute不调用内部虚拟方法

C# 如何配置NSubstitute不调用内部虚拟方法,c#,unit-testing,nsubstitute,C#,Unit Testing,Nsubstitute,我想对这个类进行单元测试 public class Email { public async virtual Task<bool> Send( ) { //code await Save(); } internal virtual async Task<bool> Save( ) { } } 公共类电子邮件 { 公共异步虚拟任务发送() { //代码 等待保存(); } 内

我想对这个类进行单元测试

public class Email 
{ 
    public async virtual Task<bool> Send(  )
    {
        //code
        await Save();
    }

    internal virtual async   Task<bool> Save( )
    {

    } 
}
公共类电子邮件
{ 
公共异步虚拟任务发送()
{
//代码
等待保存();
}
内部虚拟异步任务保存()
{
} 
}
这个单元测试代码

var email = Substitute.ForPartsOf<Email>( ); 
email.When(x => x.Save( )).DoNotCallBase(); --> why x.Save will call the real implementation code
email.Save( ).ReturnsForAnyArgs(true);
var email=Substitute.ForPartsOf();
email.When(x=>x.Save()).DoNotCallBase();-->为什么x.Save会调用真正的实现代码
email.Save().ReturnsForAnyArgs(true);
这是单元测试内部方法的正确方法吗?当我尝试将修饰符从内部更改为公共时,单元测试很好

请告知


谢谢

我认为您需要使
内部
成员对
DynamicProxyGenAssembly2
可见。此程序集由NSSubstitute(和许多其他.NET模拟库)使用的Castle DynamicProxy库创建,以创建替换/模拟类型

[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] 

如果您安装了,它应该与此情况有关。

表示在测试程序集中使用此属性,而他们的意思是在测试程序集中真正使用它,正如您在此处所示。谢谢Scott,我在此处提出了一个问题: