我们有一大堆DLL,可以让我们访问我们的数据库和其他应用程序和服务.
我们已经使用瘦客户端然后使用的瘦WCF服务层包装这些DLL.
我对如何编写仅测试WCF服务层的单元测试有点不确定.我应该只编写DLL的单元测试,以及WCF服务的集成测试吗?我很欣赏任何智慧......我知道如果我的单元测试实际上进入数据库,它们实际上并不是真正的单元测试.我也明白我不需要在单元测试中测试WCF服务主机.
所以,我对确切测试的内容和方式感到困惑.
如果要对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服务本身.
_ 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
这取决于瘦WCF服务的功能.如果它真的很薄,并且那里没有有趣的代码,请不要打扰它进行单元测试.如果那里没有真正的代码,不要害怕不进行单元测试.如果测试不能至少一级更简单,那么测试下的代码,不要打扰.如果代码是愚蠢的,测试也将是愚蠢的.您不希望有更多愚蠢的代码来维护.
如果你可以让测试一直到db那么棒!它甚至更好.这不是"真正的单元测试吗?" 根本不是问题.