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

How to configure NSubstitute NOT call internal virtual method

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

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);

这是对内部方法进行单元测试的正确方法吗?当我尝试将修饰符从 internal 更改为 public 并且单元测试正常时。

请指教

谢谢

我认为您需要让 internal 成员对 DynamicProxyGenAssembly2 可见。该程序集由 NSubstitute(以及许多其他 .NET 模拟库)使用的 Castle DynamicProxy 库创建,用于创建 substitute/mock 类型。

[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] 

如果你安装了NSubstitute.Analyzers package it should prompt you这种情况。