NSubstitute 클래스 인스턴스화로 이상한 예외가 있음을 발견했습니다. Sitecore 8.1 업데이트 3 Sitecore.Kernell.dll 작업, 다음 테스트에 통과 :내부 생성자에도 불구하고 NSubstitute를 사용하여 Sitecore 데이터베이스 만들기
[Fact]
public void CanCreateSubstituteDatabase()
{
Database db = Substitute.For<Sitecore.Data.Database>("sub");
db.Should().NotBeNull();
}
이를 Sitecore.Data.Database 만 내부 생성자가 있다는 사실에도 불구하고 :
internal Database(string name)
{....
NSubstitute에 대한 정상적인 동작이 아닌 것으로 확인되었습니다.
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");
}
}
}
,
:이 코드 프로젝트 "ExternalLibrary"를 생성System.NotSupportedException: Parent does not have a default constructor. The default constructor must be explicitly defined.
Sitecore.Data.Database 클래스에서이 오류가 발생하지 않는 이유는 무엇입니까?
빵, 즉 빨랐다. : D –
하하. 단지 내가 Sitecore.Kernel 속성을 아주 가깝게 연구했기 때문에, 아주 최근에 ;-) –
물론 이것은 Evil Implementer가 생성자에 대해 end-run을 수행 할 수 있고 SubstituteForPartsOf를 사용하여 자신의 DB를 만들 수 있음을 의미합니다. ;) –