在单元测试中托管WCF服务

Jac*_*cob 4 wcf unit-testing

我想要对我的习惯进行单元测试ServiceHostFactory.不幸的是,我InvalidOperationException在打电话时得到这个CreateServiceHost:

无法在当前托管环境中调用"ServiceHostFactory.CreateServiceHost".此API要求将调用应用程序托管在IIS或WAS中.

我可以通过重构我的类来解决这个问题,它暴露了一个公共方法,它可以由单元测试直接调用,而不是使用它继承的公共接口; 我不想仅仅为了单元测试而改变我的界面.我还看到另一个建议产生Cassini主机的SO答案,但我不想以这种方式使我的单元测试复杂化.

有没有办法解决这个ServiceHostFactory限制而不诉诸这些措施?

Jac*_*cob 5

我想出了这个问题.在我的自定义中ServiceHostFactory,我只重写了受保护的方法CreateServiceHost(Type serviceType, Uri[] baseAddresses).通过重写公共CreateServiceHost(string constructorString, Uri[] baseAddresses)方法,我能够构建服务主机工厂而没有任何问题.

之前:

public class MyServiceHostFactory : ServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

后:

public class MyServiceHostFactory : ServiceHostFactory
{
    public override ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses)
    {
        return this.CreateServiceHost(typeof(MyService), baseAddresses);
    }

    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)