Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将业务层传递给WCF服务_C#_Wcf_Unit Testing - Fatal编程技术网

C# 将业务层传递给WCF服务

C# 将业务层传递给WCF服务,c#,wcf,unit-testing,C#,Wcf,Unit Testing,我有一个WCF服务,我正试图为此编写单元测试用例。我正在从该服务中的一个方法调用业务层和其他一些WCF服务。我已经在为我的业务层使用IcO模式。但是为了在这里使用我的业务层和WCF服务的Mock对象,我需要在创建该服务实例时传递它。如果更改默认构造函数以将其作为参数接受,则必须将其公开给服务使用者 如果我更改服务的构造函数,它将如下所示: public MyService(MyBusinessLayer bl, SomeWCFService otherSrvc) { } 这样做可以吗?我在这

我有一个WCF服务,我正试图为此编写单元测试用例。我正在从该服务中的一个方法调用业务层和其他一些WCF服务。我已经在为我的业务层使用IcO模式。但是为了在这里使用我的业务层和WCF服务的Mock对象,我需要在创建该服务实例时传递它。如果更改默认构造函数以将其作为参数接受,则必须将其公开给服务使用者

如果我更改服务的构造函数,它将如下所示:

public MyService(MyBusinessLayer bl, SomeWCFService otherSrvc)
{

}

这样做可以吗?我在这里做错了什么吗?

发送服务接口,而不是执行。这样,您就可以在运行时用mock替换实现。

正确。我能做到。我可以为我的BL做同样的事情。但是这样做可以吗?这不会给客户提供“太多信息”吗?可能它也违反了封装原则。不是吗?在一个系统中,我们创建了两个构造函数,一个带有测试使用的参数,另一个没有生产代码使用的参数。这很有效,但不是团队中的每个人都认为这是个好主意,因为测试使用不同的构造函数。这是一个在两个恶魔之间进行选择的案例:)即使我这样做,客户端配置也会将它们作为一个契约公开,并且我无法控制要求使用者不要使用参数化构造函数。卡在这里:(