Методы модульного тестирования, вызывающие методы с зависимостями от уровня доступа к данным - PullRequest
1 голос
/ 04 марта 2010

Я работаю над базой кода, в которой нет никаких модульных тестов, и пытаюсь добавить к ней несколько модульных тестов. Код VB.NET, но не очень объектно-ориентированный. Мы используем NUnit для модульного тестирования. Многие классы имеют общие / статические методы.

Я пытаюсь выполнить модульное тестирование метода, который вызывает другие методы, использующие уровень доступа к данным. Мой код выглядит примерно так:

Public Class FooBar
    Private CONN_STRING As String = "<Connection String Goes Here>"

    Public Shared Function DoSomething(obj As Object) As Object
        'This is the method I want to unit test.
        '...

        Dim myLog As New Log
        myLog.Message = "Foobar"
        LogTable.InsertLog(CONN_STRING, myLog)

        Return someObject
    End Function
End Class


Public Class LogTable
    Public Shared Function InsertLog(connectionString As String, log As Log) As Integer
       Dim db As New DBTable(connectionString, "tblLog")
       Return db.Insert(log)
    End Function
End Class

Так что теперь я столкнулся с проблемой выяснения, как проверить эти методы. У нас МНОЖЕСТВО таких методов, как DoSomething, и все они выполняют статические вызовы классов уровня доступа к данным, передавая строку подключения.

Что я могу сделать в этой ситуации, чтобы избежать реального вызова в БД?

1 Ответ

2 голосов
/ 04 марта 2010

Вы должны макет БД. То есть используйте объект, который имеет такой же интерфейс , но не имеет доступа к БД. Этот объект может быть либо написан от руки, либо сгенерирован с помощью mock framework . Затем модульные тесты запрашивают фиктивный объект для утверждения, который был вызван, как и ожидалось.

Затем ваш тестируемый класс вызывает экземпляр ложного класса БД вместо реального объекта БД; этот метод называется внедрение зависимостей : вы можете либо передать фиктивный объект тестируемому классу, либо положиться на Factory для возврата правильного экземпляра класса, в зависимости от кода, который тестируется или выполняется в производстве.

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