如何对WCF服务进行单元测试?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (22)

我们有一大堆DLL,可以让我们访问我们的数据库和其他应用程序和服务。

我们已经用这些DLL封装了我们的客户随后使用的一个精简的WCF服务层。

我有点不确定如何编写仅测试WCF服务层的单元测试。我应该为DLL编写单元测试,还是为WCF服务进行集成测试?我会很感激任何智慧......我知道,如果我的单元测试实际上进入数据库,他们实际上并不是真正的单元测试。我也明白,我并不需要在单元测试中测试WCF服务主机。

所以,我对于测试什么以及如何测试感到困惑。

提问于
用户回答回答于

你的服务消费者并不关心您的服务内容。要真正测试你的服务层,我认为你的图层需要下载到DLL和数据库,并至少写入CRUD测试。

用户回答回答于

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

扫码关注云+社区