2008-09-01 152 views
18

我們有一大堆DLL,可以讓我們訪問我們的數據庫和其他應用程序和服務。如何測試WCF服務?

我們包裹這些DLL用薄WCF服務層,我們的客戶,然後消耗。

我對如何編寫單元測試,只有測試WCF服務層有點不確定。我應該爲DLL編寫單元測試,還是爲WCF服務進行集成測試?我會很感激任何智慧......我知道,如果我的單元測試實際上進入數據庫,他們實際上並不是真正的單元測試。我也明白,我並不需要在單元測試中測試WCF服務主機。

所以,我很困惑什麼測試和如何。

+1

有沒有必要UNIT測試你的WCF服務,完全可以寫INTEGRATION測試。 – 2013-07-23 12:32:30

+0

避免使用模擬,一個單元不是沒有任何外部依賴的類。一個單元是一個端到端的業務邏輯片,即使它涉及數據庫。您始終可以使用內存,甚至可以更好地使用BerkeleyDB等嵌入式數據庫進行測試。您不需要駐留在其他機器上的實際數據庫。這樣你就可以在沒有大量嘲諷的情況下有效地測試你的單位。 – 2014-11-16 08:31:05

回答

4

您的服務的消費者並不關心您的服務下面有什麼。 要真正測試您的服務層,我認爲您的圖層需要下載到DLL和數據庫,並至少寫入CRUD測試。

7

如果你想進行單元測試WCF服務類,確保你在考慮鬆耦合設計,讓您能模擬出每個扶養,你只是想測試服務類本身內部的邏輯。

例如,在下面的服務,我打破了我的使用「窮人的依賴注入」數據訪問庫。

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 
7

這取決於瘦WCF服務的功能。如果它真的很薄,並且沒有有趣的代碼,請不要打擾單元測試。如果沒有真正的代碼,不要害怕不要單元測試。如果測試不能至少簡單一級,那麼測試下的代碼不要煩惱。如果代碼是愚蠢的,測試也是愚蠢的。你不想有更多的愚蠢的代碼來維護。

如果你可以有測試,所有的方式去分貝,那麼太棒了!它甚至更好。這不是一個「真正的單元測試?」根本不是問題。