Issue with mocking WCF service

1.4k Views Asked by At

I have some problems with mocking WCF services:

1) I declare a class with empty methods which only implements my service interface:

public class MyFakeService : IMyService {
   ...
   public virtual MyResult GetResult(MyResponse response){
      throw new NotImplementedException();
   };
}

2) I have the MyResponse class:

public class MyResponse {
      public long myField;
   }

3) I create a mock of the service class and a service host to host this fake service:

myFakeService = mocks.StrictMock<MyFakeService>();
ServiceHost host = new ServiceHost(myFakeService);

(here I have ommited the endpoint configuration etc.)

4) And now I try to test my client. The client.GetSomethingFromService() method exactly calls the GetResult(MyResponse) method of the service.

With.Mocks(mocks)
    .Expecting(() => Expect
        .Call(myFakeService.GetResult(null))
        .IgnoreArguments()
        .Constraints(PublicField.Value("myField", 777))
        .Return(new MyResult()))
    .Verify(() => myClient.GetSomethingFromService());

The issue is that if something wrong in the service, I can only see something like this:

System.ServiceModel.CommunicationObjectFaultedException: 
 The communication object, System.ServiceModel.Channels.ServiceChannel, cannot be used
 for communication because it is in the Faulted state.

How do I know what exactly wrong? Maybe arguments constraints verification failed or something else...?

Thanks.

1

There are 1 best solutions below

0
On

Firstly, avoid using strict mocks. They're a bad practice because they make your tests too brittle.

Secondly if you're testing a WCF service you don't need to spin up a ServiceHost since you'll then be doing an integration test. You're just wanting to test the logic of your service, not the WCF infrastructure.

For a run through of how to use RhinoMocks and WCF services have a look at my blog post on unit testing WCF services