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,我在此处提出了一个问题: