2011-02-08 3 views
5

私は、外部のクライアントが消費するWebサービス(HTTPベース)を公開するWCFプロジェクトを開発しています。私はTFS 2010を継続的インテグレーションに使用する予定です。WCFプロジェクトの統合テストを行う方法は?

私は、継続的な統合と統合テストを行いたいと考えています。

、私の質問は:統合テストをやって

-doesは、私は本番環境を模倣するテスト環境を作成する必要があることを意味しますか? それは、私の単体テストツールからWCF、データベース、およびその他のオブジェクトを呼び出さなければならないということですか?たとえば:

[TestClass] 
public class ServiceIntegrationTest 
{ 
    private static ServiceHost serviceHost; 

    [ClassInitialize] 
    public static void MyClassInitialize(TestContext testContext) 
    { 
     serviceHost = new ServiceHost(typeof(Service1), new [] { new Uri("http://127.0.0.1:8001/") }); 
     serviceHost.AddServiceEndpoint(typeof(IService1), new BasicHttpBinding(), "Service1"); 
     serviceHost.Open(); 
    } 

- 私は実際にこれを実行する方法を理解していません。 - 実際の.NET(WCF)プロジェクトでこれを実行する方法に関するチュートリアルはありますか?

答えて

2

私は、モックを使って単体テストを正しく分解する方法の専門家ではありませんが、WCF /データベースバックエンドとの統合テストで私の経験を共有できます。

基本的には、すべての起動コードを処理するためにシングルトンを使用しました。つまり、MyClassInitializeメソッドは、サービスホスト/データベースが確実に稼動していることを確認する静的メソッドを呼び出します。そのようにして、ユニットテストの各セットに対してバックエンドを設定/解除する必要はありませんでした。

[ClassInitialize] 
public static void MyClassInitialize(TestContext testContext) 
{ 
    GlobalBackend.EnsureStarted(); 
} 

私はあなたがおそらくそのためにグーグルでいくつかのより多くを行う必要があるでしょう、オンライン任意の例を知りません。

あなたのテストを書くための細分性については、統合テストについて話しました。実際のデータベースに接続されているサービスコールをテストしたいと思うようです。あなたのサービスにいくつかのCRUD機能が組み込まれているとしましょう.1つの単体テスト(ここでの統合テスト)はウィジェット(または何でも)を作成してから、loadWidgetを呼び出してウィジェットが正しく作成されたことを確認します。

1つのユニットテストで行うテスト(統合テストを行うか、より細かいユニットテストを行うかによって異なります)は、多くの書籍を埋め込む可能性のある課題です。

EDIT:AssemblyCleanup attribute

MSDNページ:また、データベース/サービスのいくつかのクリーンアップ/シャットダウンを行う必要があります。我々は最終的にこれをやってしまった(以下のコードを - だから今、私はより明確に覚えてい

[AssemblyInitialize()] 
public static void AssemblyInit(TestContext context) 
{ 
     GlobalBackend.EnsureStarted(); 
} 

:ちょうどであなたの起動コードのすべてを置くことにつながることができます。もちろん、

​​

、 )

+0

wow。この精巧な答えに感謝します。 – Attilah

関連する問題