18

データベースやその他のアプリケーションやサービスへのアクセスを可能にする DLL がたくさんあります。

これらの DLL を、クライアントが使用する薄い WCF サービス レイヤーでラップしました。

WCF サービス層のみをテストする単体テストを作成する方法が少しわかりません。DLL の単体テストと WCF サービスの統合テストだけを作成する必要がありますか? 知恵をいただければ幸いです...ユニットテストが実際にデータベースに送られる場合、実際には真のユニットテストではないことを知っています。また、単体テストで WCF サービス ホストを実際にテストする必要がないことも理解しています。

そのため、何をどのようにテストするかについて正確に混乱しています。

4

3 に答える 3

7

これは、シンWCFサービスの機能によって異なります。それが本当に薄く、そこに興味深いコードがない場合は、ユニットテストを気にしないでください。実際のコードがない場合は、ユニットテストを行わないことを恐れないでください。テストを少なくとも1レベル単純化できない場合は、テスト対象のコードを気にしないでください。コードがばかげている場合、テストもばかげています。あなたは維持するためにもっと愚かなコードを持ちたくありません。

あなたがデータベースに至るまで行くテストを持つことができれば、それなら素晴らしいです!それはさらに良いです。それは「真の単体テスト」ではありませんか?全く問題ありません。

于 2008-09-01T19:19:36.430 に答える
7

WCF サービス クラスを単体テストする場合は、疎結合を念頭に置いて設計してください。これにより、サービス クラス自体の内部のロジックのみをテストしたいので、各依存関係をモックアウトできます。

たとえば、以下のサービスでは、「Poor Man's Dependency Injection」を使用してデータ アクセス リポジトリを分割しています。

Public Class ProductService
    Implements IProductService

    Private mRepository As IProductRepository

    Public Sub New()
        mRepository = New ProductRepository()
    End Sub

    Public Sub New(ByVal repository As IProductRepository)
        mRepository = repository
    End Sub

    Public Function GetProducts() As System.Collections.Generic.List(Of Product) Implements IProductService.GetProducts
        Return mRepository.GetProducts()
    End Function
End Class

クライアントでは、サービス コントラクトのインターフェイスを使用して、WCF サービス自体をモックできます。

<TestMethod()> _
Public Sub ShouldPopulateProductsListOnViewLoadWhenPostBackIsFalse()
    mMockery = New MockRepository()
    mView = DirectCast(mMockery.Stub(Of IProductView)(), IProductView)
    mProductService = DirectCast(mMockery.DynamicMock(Of IProductService)(), IProductService)
    mPresenter = New ProductPresenter(mView, mProductService)
    Dim ProductList As New List(Of Product)()
    ProductList.Add(New Product)
    Using mMockery.Record()
        SetupResult.For(mView.PageIsPostBack).Return(False).Repeat.Once()
        Expect.Call(mProductService.GetProducts()).Return(ProductList).Repeat.Once()
    End Using
    Using mMockery.Playback()
        mPresenter.OnViewLoad()
    End Using
    'Verify that we hit the service dependency during the method when postback is false
    Assert.AreEqual(1, mView.Products.Count)
    mMockery.VerifyAll()
End Sub
于 2008-09-01T02:26:40.437 に答える
4

サービスの消費者は、サービスの下にあるものを気にしません。サービス層を実際にテストするには、層を DLL とデータベースに落とし込み、少なくともCRUDテストを作成する必要があると思います。

于 2008-09-01T02:27:57.143 に答える