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

时间:2019-03-19 09:22:58

标签: c# unit-testing nsubstitute

我要对该课程进行单元测试

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

这是对内部方法进行单元测试的正确方法吗?当我尝试将修饰符从内部更改为公开时,单元测试很好。

请告知。

谢谢

1 个答案:

答案 0 :(得分:0)

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

[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] 

如果您安装NSubstitute.Analyzers package,则应prompt you处理这种情况。