두 개의 WCF 서비스를 여는 Windows 서비스가 있습니다. 나는 단위 테스트 OnStart()를 원하고 service1.Open()과 service2.Open()이 호출되고 있음을 주장한다. ONSTART()는 다음과 같습니다내 단위 테스트에서 ServiceHost에 Open()이 호출되었음을 어떻게 확인할 수 있습니까?
protected override void OnStart(string[] args)
{
// host WCF services
_service1.Open();
_service2.Open();
}
내가 같은 생성자 오버로드에 서비스를 주입 해요 : 나는이 같은 ServiceHostBase의 스텁을 생성하는 RhinoMocks를 사용하고
public WinService(ServiceHostBase service1,
ServiceHostBase service2)
{
_service1 = service1;
_service2 = service2;
InitializeComponent();
}
:
[TestMethod()]
public void WinServiceOnStartCallsDependenciesAsExpected()
{
ServiceHostBase service1 = MockRepository.GenerateStub<ServiceHostBase>();
ServiceHostBase service2 = MockRepository.GenerateStub<ServiceHostBase>();
WinService target = new WinService(service1, service2);
WinService_Accessor privateTarget = new WinService_Accessor(new PrivateObject(target));
privateTarget.OnStart(null);
내 테스트에서 OnStart()를 호출하면 service1.Open()을 호출 할 때 null 참조 예외가 발생합니다. 나는 service1이 그 시점에서 조롱 된 객체이며 null을 던지는 Open()임을 확인했습니다. Open() 실제로 System.ServiceModel.Channels.CommunicationObject 메서드를 알고 Stubbing 또는 Mocking뿐만 아니라,하지만 여전히 개체 참조 오류가 발생합니다. 그것은 가상 메소드가 아니기 때문에 조롱 된 버전에 의해 오버라이드되지는 않을 것이라고 생각할 것입니다. 그러나 Expectation reportservice.Stub(r => r.Open())
을 설정하려고하면 기본 타임 아웃이 아닌 실제 예외를 실행하는 것처럼 다른 예외가 생깁니다. CommunicationObject Open() 메소드. null 참조를 던지고있는 RhinoMocky입니다.
이 모든 것을 말하자면, 저는 UnitHP에서 ServiceHost에서 Open()이 호출되고 있음을 확인하는 방법에 대한 도움을 찾고 있습니다. =]
그래, 나는 래퍼 접근법에 대해 논쟁을 벌 였지만, 우리는 단지 그 사실을 밝혀야 할 것이라고 생각한다. Open() 호출은 절대로 조건부 적이 지 않으므로 위험성으로 인해 그만한 가치가있는 추가적인 복잡성이없는 것처럼 보입니다. 놀랍게도 놀라운 일이 발생하지 않는다면 나는 이것을 답으로 표시 할 것입니다. – sonicblis