유닛 테스트용 아날로그 IoC 컨테이너
IServiceCollection/IServiceProvider을 찾고 있다. 하나의 클래스 (또는 두 개의 의존 클래스) 에서 나의 여러 사이트/웹 서비스의 시작 코드를 테스트하기 위해 실제 것이 아닌 모크를 사용하고 있다.나는 최근에 그것들을 IoC로 바꾸었다. 처음에는 머리가 아팠다. 왜냐하면 나중에 필요한 몇 가지 유형을 IoC 용기에 등록하는 것을 잊었기 때문이다.찾지 못했기 때문에, 나는 스스로 하나를 짓기로 결정했다.
나는 그것을 MockProvider이라고 부른다. 너도 NuGet을 통해 그것을 사용할 수 있다.
ASP에서 DI를 사용할 수 있습니다.NET 커널의 다양한 방법.
public class MyController : Controller
{
public MyController(IFoo myFoo){ ... }
}
[FromServices] 속성을 사용하는 컨트롤러 방법과 유사합니다.public class MyController : Controller
{
public async Task<IActionResult> Index([FromServices]IFoo myFoo){ ... }
}
IServiceProvider의 실례를 제공하고, 그 구조 함수에서 의존 관계를 해결할 수 있습니다.나는 네가 마땅하다고 말한 것이 아니지만, 너는 할 수 있다.이게 어떻게 된 일입니까?
이 작은 조수는 기본 ASP를 대체하기 위해
IServiceProvider과 IServiceCollection을 제공합니다.NET 커널 유형 및 Moq의 시뮬레이션을 사용합니다.IoC 컨테이너의 부팅 유형 등록이 완전한지 개인적으로 테스트합니다.
나는 그것으로 무엇을 할 수 있습니까?
부팅 시
IServiceCollection 및 IServiceProvider으로 사용할 수 있는 디렉터/메소드를 제공합니다.NET CORE의 의존성 주입매번 완전한 설정을 실행하지 않으려면, 자신의 시뮬레이션을 추가할 수도 있습니다.
IServiceCollection으로 사용빈 MockProvider를 생성하여 기본
IServiceCollection의 StartUp.ConfigureServices으로 사용합니다.IServiceProvider으로 사용전체 MockProvider를 생성하여
IServiceProvider에 필요한 모든 방법으로 사용합니다.당신의 시뮬레이션을 추가합니다
특정 시뮬레이션을 추가하는 가장 간단한 방법은
CreateMock<T> 방법을 사용하는 것이다. var m = new MockProvider();
m.CreateMock<IFoo>();
Assert.IsNotNull(m.GetService<IFoo>());
약간의 과부하가 있다.public Mock<U> CreateMock<U>()이것은 가장 기본적인 판본이다.구조 함수 파라미터를 찾아서 시뮬레이션을 만들 것입니다.완성되면 시뮬레이션을 되돌려줍니다.이전에 등록된 형식을 사용하여 구조 함수 매개 변수를 매칭하고 아날로그를 직접 만들 수 있기 때문에 매개 변수 형식을 용기에 넣은 후에만 사용하거나 구조 함수에 매개 변수가 없는 형식에만 사용할 수 있습니다.
public Mock<U> CreateMock<U>(params object[] o)이것은 구조 함수 파라미터를 지정하고 만든 시뮬레이션을 되돌려줍니다.public MockDescriptor CreateMock(Type serviceType)첫 번째와 마찬가지로 자체적으로 모든 일을 완성하지만 국제올림픽위원회가 등록한 내부 대표에게 돌려준다.처음 사용할 때, Mock은 불활성 생성입니다.public MockDescriptor CreateMock(Type serviceType, params object[] o)두 번째와 마찬가지로, 이것은 구조 함수 파라미터를 지정할 수 있지만, IoC가 등록한 내부 표시를 되돌려줍니다.처음 사용할 때, Mock은 불활성 생성입니다.public MockDescriptor CreateMock(Type serviceType, IEnumerable<object> o)두 번째와 마찬가지로, 이것은 구조 함수 파라미터를 지정할 수 있지만, IoC가 등록한 내부 표시를 되돌려줍니다.처음 사용할 때, Mock은 불활성 생성입니다.public void Add(ServiceDescriptor item)IServiceCollections 내부 유형을 사용하는 세 가지 방법이 있습니다.ServiceDescriptor입니다.NET Core의 IoC 컨테이너이렇게 하면 ServiceType이 사용되고 에뮬레이션이 등록됩니다.처음 사용할 때, Mock은 불활성 생성입니다.
MockDescriptor에서 ServiceDescriptor을 파생시켜 먼저 시뮬레이션을 만들고 IoC 용기에 추가할 수 있도록 합니다.MockDescriptor - 인스턴스를 컨테이너에 있는 그대로 추가합니다.InstanceDescriptor이 있습니다. 이것은 용기에 실제 대상을 추가하여 자신의 캐시를 실현하고 IoC 용기에서 사용할 수 있도록 합니다.InstanceDescriptor-Instance는 MockDescriptor에서 파생된 원형으로 용기에 추가됩니다.FAQ
동일한 서비스 유형에 여러 번 등록하면
GetService<T>()에서 어떤 서비스 유형이 반환됩니까? var fooMock1 = new Mock<IFoo>();
var fooMock2 = new Mock<IFoo>();
var m = new MockProvider();
m.Add<IFoo>(fooMock1);
m.Add<IFoo>(fooMock2);
첫 번째 참가자가 이겼다.따라서 이 내용은 fooMock1만 용기에 추가된다.
Reference
이 문제에 관하여(유닛 테스트용 아날로그 IoC 컨테이너), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/andreasjakof/ioc-container-with-mocks-for-unit-testing-449g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)