尽管有内部构造函数,但仍允许使用 NSubstitute 创建 Sitecore 数据库
Creating a Sitecore Database with NSubstitute allowed despite internal constructor
我发现 NSubstitute class 实例化有一个奇怪的异常。使用 Sitecore 8.1 更新 3 Sitecore.Kernell.dll,以下测试通过:
[Fact]
public void CanCreateSubstituteDatabase()
{
Database db = Substitute.For<Sitecore.Data.Database>("sub");
db.Should().NotBeNull();
}
尽管 Sitecore.Data.Database 只有一个内部构造函数:
internal Database(string name)
{....
我已经确认这不是 NSubstitute 的正常行为。我使用以下代码创建了一个项目 "ExternalLibrary":
namespace ExternalLibrary
{
public class Foo
{
internal Foo(string bar)
{
Bar = bar;
}
public string Bar { get; }
}
}
当我尝试使用 NSubstitute 在单独的库中实例化它时,
namespace NSubClassInstantiation
{
using ExternalLibrary;
using FluentAssertions;
using NSubstitute;
using Xunit;
public class FooTest
{
[Fact]
public void CanInstantiate()
{
var foo = Substitute.For<Foo>("baz");
foo.Bar.Should().Be("baz");
}
}
}
测试按预期失败,但出现以下异常,
System.NotSupportedException: Parent does not have a default constructor. The default constructor must be explicitly defined.
为什么 Sitecore.Data.Database class 没有抛出这个错误?
NSubstitute 命名空间在 Sitecore.Kernel 中标记为 InternalsVisibleTo。
What is the DynamicProxyGenAssembly2 assembly?
来自 Sitecore.Kernel:[程序集:InternalsVisibleTo("DynamicProxyGenAssembly2")]
我发现 NSubstitute class 实例化有一个奇怪的异常。使用 Sitecore 8.1 更新 3 Sitecore.Kernell.dll,以下测试通过:
[Fact]
public void CanCreateSubstituteDatabase()
{
Database db = Substitute.For<Sitecore.Data.Database>("sub");
db.Should().NotBeNull();
}
尽管 Sitecore.Data.Database 只有一个内部构造函数:
internal Database(string name)
{....
我已经确认这不是 NSubstitute 的正常行为。我使用以下代码创建了一个项目 "ExternalLibrary":
namespace ExternalLibrary
{
public class Foo
{
internal Foo(string bar)
{
Bar = bar;
}
public string Bar { get; }
}
}
当我尝试使用 NSubstitute 在单独的库中实例化它时,
namespace NSubClassInstantiation
{
using ExternalLibrary;
using FluentAssertions;
using NSubstitute;
using Xunit;
public class FooTest
{
[Fact]
public void CanInstantiate()
{
var foo = Substitute.For<Foo>("baz");
foo.Bar.Should().Be("baz");
}
}
}
测试按预期失败,但出现以下异常,
System.NotSupportedException: Parent does not have a default constructor. The default constructor must be explicitly defined.
为什么 Sitecore.Data.Database class 没有抛出这个错误?
NSubstitute 命名空间在 Sitecore.Kernel 中标记为 InternalsVisibleTo。
What is the DynamicProxyGenAssembly2 assembly?
来自 Sitecore.Kernel:[程序集:InternalsVisibleTo("DynamicProxyGenAssembly2")]