WCF调用没有接口的方法?

多米申克

刚遇到一个问题。我正在尝试准备好wcf服务unittest,或者更好的是必须使用unittest测试所有代码。

Atm不可能的结局我已经连接到每次使用的crm 2011服务器。
所以我用一个接口代替了它。但我想像使用WCF一样对WCF进行单元测试。
现在,我的想法是制作一个公共方法并建立一个虚假的连接。

现在我的问题是,即使它不在接口中,也可以调用此方法(例如:ConnectionHandler)吗?

看起来像这样:

public interface IWCF
{
    [OperationContract]
    bool method1();

    [OperationContract]
    bool method2();
}

public class WCF:  IWCF
{

    public bool method1(){
    ...
    }

    public bool method2(){
    ...
    }

    private connection connectionHandler;
    public connection ConnectionHandler(Iconnection con){
        if(con != null){
            connectionHandler = con;
        } else {
            connectionHandler = takedefault;
        }
    }
}

编辑
啊,我忘了告诉我:我实际上是出于安全考虑,我不希望任何人可以将不同的连接传递到服务器,仅出于单元测试目的。

劳伦斯

任何精心设计的代码段的重要功能之一就是您要清楚地向客户展示其功能。这将成为面向服务的应用程序的关键功能,因为您以标准化的方式公开功能以供外部客户端使用。

原则上,调用不属于接口的方法是不好的,因为您现在正在编程实现而不是接口。令人高兴的是,WCF知道这一点,并且不会让您使用不在接口上的方法,因为该方法未使用OperationContract属性进行修饰

对于您的代码-我不确定您要实现的目标是什么-拥有一个客户端集(我假设是这样),例如数据库连接,这让我有些不安(首先,这意味着您的服务是保持某些违反服务无状态原则的状态)。这并不意味着您所做的事情一定是错误的,但是您应该发现,在精心设计的应用程序中,您几乎不必违反它。

就是说,如果您想向不同的客户端公开不同的功能区域,那么正确的方法是在服务上公开代表不同协定的端点:

[ServiceContract]
public interface IWCF
{
    [OperationContract]
    bool method1();

    [OperationContract]
    bool method2();
}

 [ServiceContract]
public interface IConnectionWCF
 {
     [OperationContract]
     bool SetConnection(string connection);
 }

 public class WCF : IWCF, IConnectionWCF
{
     public bool method1()
     {
        ...
     }

     public bool method2()
     {
        ...
     }

     public bool SetConnection(string connection)
     {
         ...
     }
}

您还需要注意,接收到的WCF服务必须首先由客户端序列化,通过有线发送并在服务器上反序列化。您在这里处理的是具体类,而不是抽象。Iconnection在面向服务的环境中,将接口(例如)作为参数传递给服务调用并没有任何意义。

关于单元测试-请记住,从根本上讲,该类WCF只是一个普通的老类。您可以对此类进行单元测试,以使其独立于WCF服务。无论如何,您都不应该在单元测试中设置任何服务托管功能-您要检查编写的代码是否正确-WCF堆栈已由Microsoft测试。

编辑

在回答您的意见,建议作为在这里,你应该使用的构造方法注入设置连接对象时的类实例化。这就提出了一个问题,即您如何获得对WCF服务的实例化的控制。您需要实现IInstanceProvider,或更详细的实现请参见此处这样,当您的服务托管在WCF中IInstanceProvider时,可以在测试时使用,只需将伪造的连接对象传递给构造函数即可。

编辑

为了明确起见,此类的单元测试将类似于以下内容:

[TestClass]
public class UnitTests
{
    [TestMethod]
    public void Test()
    {
        Iconnection connection = new FakeConnection();
        WCF classUnderTest = new WCF(connection);

        //Run test logic
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

WCF无法实现接口-没有匹配的返回类型

来自分类Dev

接口的重载方法不能接受联合类型:“没有重载匹配此调用”

来自分类Dev

KotlinPoet - 接口方法没有括号

来自分类Dev

没有调用centralManager方法

来自分类Dev

委托方法没有被调用?

来自分类Dev

Bean方法没有被调用

来自分类Dev

没有调用onDowngrade()方法

来自分类Dev

Appirater方法没有被调用

来自分类Dev

Mailer方法没有被调用?

来自分类Dev

片段方法没有被调用

来自分类Dev

没有调用centralManager方法

来自分类Dev

UITabBarControllerDelegate方法没有被调用

来自分类Dev

UITabBarControllerDelegate 的方法没有被调用

来自分类Dev

我试图在一个类中实现抽象类和接口,并且仅调用了接口成员,而抽象方法没有?

来自分类Dev

没有实现接口的所有方法

来自分类Dev

调用隐藏接口方法

来自分类Dev

调用接口对象方法

来自分类Dev

调用接口的异步方法

来自分类Dev

调用类的接口方法

来自分类Dev

从 Java 接口调用方法

来自分类Dev

有没有一种方法可以在一个应用程序中为一个WCF调用指定TLS 1.0,为另一个WCF或WebClient调用指定TLS 1.2?

来自分类Dev

是否可以调用实现某个接口的所有对象的方法?

来自分类Dev

为什么Java中的DataInput接口没有readUnsignedInt方法

来自分类Dev

如何解决“类型接口没有字段或方法”错误?

来自分类Dev

没有接口方法stream()Ljava / util / stream / Stream;

来自分类Dev

COM接口/类返回“对象没有属性或方法”错误

来自分类Dev

没有可见的接口声明方法xx

来自分类Dev

Swift tableView委托方法没有被调用

来自分类Dev

没有调用Grails GORM beforeUpdate方法

Related 相关文章

热门标签

归档