0

問題が発生しました。私は、wcf サービスの unittest を準備できるようにするか、すべてのコードを unittest でテストする必要があるようにしようとしています。

毎回使用されるcrm 2011サーバーへの接続があります。
だから私はそれをインターフェースに置き換えました。しかし、私はあなたがそれを使うように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;
        }
    }
}

編集
ああ、私はこれを言うのを忘れていました:私は実際にセキュリティを念頭に置いています.誰もが単体テストの目的でのみサーバーに別の接続を渡すことができるようにしたくありません.

4

2 に答える 2

1

このメソッドを呼び出すことは可能です。インターフェイスを具体的なオブジェクトにキャストできます。しかし、それはサービスの実装の詳細を知らないはずの呼び出しコードを危険にさらすことになります。

あなたの状況では、コンストラクター注入を使用することをお勧めします。そのため、サービスの実装は次のようになります。

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

    [OperationContract]
    bool method2();
}

public class WCF:  IWCF
{
    private connection connectionHandler;

    public WCF(Iconnection con)
    {
         if(con != null){
            connectionHandler = con;
        } else {
            connectionHandler = takedefault;
        }
    }

    public bool method1(){
    ...
    }

    public bool method2(){
    ...
    }



}

この場合、クライアントでもコンストラクター注入を使用すると、クライアント コードはサービス実装の詳細を認識しません。

于 2013-09-25T08:45:32.773 に答える