moq를 사용하여 모의 저장소에서 모의 객체를 검색하려면 어떻게해야합니까?모의 저장소 또는 다른 모의 공장과 모의 저장소에서 모의 검색
테스트 유닛을 처음 지원할 때 실제로 설계되지 않은 응용 프로그램 (mvc2)이 있지만이를 적용하려고합니다. 원하는 유형을 만드는 서비스 로케이터가 있습니다.
기본적으로 mock 프레임 워크를 사용하여 수행하려는 작업은 메소드의 서비스를 나타내는 변수를 mock 객체로 대체 한 다음 해당 mock 객체를 검색하여 설정하려고합니다.
그래서 내 테스트 유닛에서
private ApprovalLevel GetApprovalLevel(Fusion Fusion)
{
var ScopeofService=ServiceLocator.GetInstance<IScopeofService>();
var programs=ScopeofService.GetPrograms();
...
}
나는이 작품을 잘 내 IScopeofService을 조롱하는 모의 커널을 사용하도록 ServiceLocator를 설정합니다. 모의 커널은 모의 저장소를 매개 변수 MockRepository Moq으로 보내어 원하는 인터페이스에 원하는 모의 객체를 바인딩하고 생성합니다.
GetPrograms()
에 대한 가짜 값을 설정하기 위해 테스트에서 모의 객체를 가져 오려고했지만 MockRepository에는 새로운 모의 객체를 만드는 메소드가 없습니다.
그래도 그는 VerifyAll 메소드가 있기 때문에 모의에 대한 모든 참조를 유지합니다.
업데이트
public MockNinjectControllerFactory(Moq.MockRepository mockRepository)
{
Kernel = new StandardKernel(new MockNinjectServices(mockRepository));
}
public class MockNinjectServices : NinjectModule
{
private readonly MockRepository _mockRepository;
public MockNinjectServices(MockRepository _mockRepository)
{
this._mockRepository = _mockRepository;
}
// TODO MARIAN: Resolver should return actualy mock objects also to be able to set them.
public void BindToConstant<T>() where T : class
{
Bind<T>().ToConstant(_mockRepository.Create<T>().Object).InSingletonScope();
}
public void BindMock<T>() where T : class
{
Bind<Mock<T>>().To(typeof(Mock<T>)).InSingletonScope();
}
public override void Load()
{
BindToConstant<IPaymentInvoiceRep>();
BindToConstant<IPaymentInvoiceBL>();
}
}
그리고 시험 자체 :
[TestFixture]
public class DemoControllerFixture
{
readonly MockRepository _mockRepository = new MockRepository(MockBehavior.Default);
[Test]
public void Should_MyMethod()
{
EvedServiceLocator.Default = new MockNinjectControllerFactory(_mockRepository);
var sut=new DemoController();
// now if my sut has something that will resolve as mock created by my mockRepository I would like to retrieve that mock and set up something on it.
}
}
나는 당신이 가지고있는 문제를 이해하는 데 어려움을 겪고 있습니다. 테스트에서 서비스 위치 지정자를 설정하려는 코드를 게시하고 문제를 조금 명확히하십시오. –
안녕하세요 답변을위한 thx 내 코드에 관한 업데이트를 게시했습니다. –
의존성 주입 문제와 비슷하게 보이지만 조롱하는 프레임 워크 문제는 아닙니다. DI에서는 먼저 컨테이너에 종속성을 "등록"하고 프레임 워크가 런타임에이를 "해결"하도록해야합니다. 귀하가 제공 한 소스 코드에서 IScopeofService가 등록되고 해결되는 것을 볼 수 없습니다. – Amol