Я обнаружил странную аномалию с экземпляром класса NSubstitute. Работа с Sitecore 8,1 обновление 3 Sitecore.Kernell.dll, следующий тест пройден:Создание базы данных Sitecore с NSubstitute допускается, несмотря на внутренний конструктор
[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?
Bam, это было быстро. : D –
Ха-ха. Только потому, что я изучал Sitecore.Kernel атрибуты близко, совсем недавно ;-) –
Конечно, это означает, что Evil Implementer может выполнить конечный запуск вокруг конструктора и использовать SubstituteForPartsOf для создания собственных БД. ;) –