模拟WCF服务的问题

时间:2011-02-16 08:45:09

标签: wcf unit-testing mocking rhino-mocks

我在模拟WCF服务方面遇到了一些问题:

1)我声明一个具有空方法的类,它只实现我的服务接口:

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

2)我有MyResponse课程:

public class MyResponse {
      public long myField;
   }

3)我创建了服务类的模拟和服务主机来托管这个假服务:

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

(这里我省略了端点配置等。)

4)现在我尝试测试我的客户端。 client.GetSomethingFromService()方法正好调用服务的GetResult(MyResponse)方法。

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

问题是,如果服务出现问题,我只能看到这样的内容:

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

我怎么知道究竟是什么错?也许参数约束验证失败或其他东西......?

感谢。

1 个答案:

答案 0 :(得分:1)

首先,避免使用严格的模拟。它们是一种不好的做法,因为它们会使你的测试变得太脆弱。

其次,如果您正在测试WCF服务,则不需要启动ServiceHost,因为您将进行集成测试。您只是想测试服务的逻辑,而不是WCF基础架构。

要了解如何使用RhinoMocks和WCF服务,请查看我在 unit testing WCF services上的博客文章