Как мне протестировать сервис WCF? - PullRequest
18 голосов
/ 01 сентября 2008

У нас есть целая куча библиотек DLL, которые дают нам доступ к нашей базе данных и другим приложениям и службам.

Мы обернули эти библиотеки DLL тонким слоем службы WCF, который затем потребляют наши клиенты.

Я немного не уверен в том, как писать модульные тесты, которые проверяют только уровень сервиса WCF. Должен ли я просто написать модульные тесты для библиотек DLL и интеграционные тесты для служб WCF? Я был бы признателен за любую мудрость ... Я знаю, что если мои модульные тесты действительно перейдут в базу данных, они не будут настоящими модульными тестами. Я также понимаю, что мне не нужно тестировать хост службы WCF в модульном тесте.

Итак, я не совсем понимаю, что именно тестировать и как.

Ответы [ 3 ]

7 голосов
/ 01 сентября 2008

Это зависит от того, что делает тонкий сервис WCF. Если он действительно тонкий и там нет интересного кода, не беспокойтесь о его модульном тестировании. Не бойтесь ничего не тестировать, если там нет реального кода. Если тест не может быть хотя бы на один уровень проще, чем тестируемый код, не беспокойтесь. Если код глуп, тест также будет тупым. Вы не хотите иметь больше глупого кода для поддержки.

Если у вас могут быть тесты, вплоть до БД, тогда отлично! Это даже лучше. Это не "настоящий юнит тест?" Без проблем.

7 голосов
/ 01 сентября 2008

Если вы хотите провести модульное тестирование классов обслуживания 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
4 голосов
/ 01 сентября 2008

Потребителю вашей услуги не важно, что находится под вашей услугой. Чтобы действительно протестировать ваш сервисный уровень, я думаю, что ваш уровень должен перейти к DLL и базе данных и написать по крайней мере CRUD тест.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...