我们有一大堆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
Run Code Online (Sandbox Code Playgroud)
在客户端上,您可以使用服务契约的接口来模拟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
Run Code Online (Sandbox Code Playgroud)
这取决于瘦WCF服务的功能.如果它真的很薄,并且那里没有有趣的代码,请不要打扰它进行单元测试.如果那里没有真正的代码,不要害怕不进行单元测试.如果测试不能至少一级更简单,那么测试下的代码,不要打扰.如果代码是愚蠢的,测试也将是愚蠢的.您不希望有更多愚蠢的代码来维护.
如果你可以让测试一直到db那么棒!它甚至更好.这不是"真正的单元测试吗?" 根本不是问题.
| 归档时间: |
|
| 查看次数: |
12950 次 |
| 最近记录: |