Как выполнить модульное тестирование пустого метода веб-контроллера API - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть метод void в контроллере, который вставляет данные в локальную базу данных. Как я могу сделать интеграционный тест по этому методу.

Я пробовал это до сих пор и не знаю, что добавить в assert.

 [TestMethod]
    public void ProcessTransactions()
    {
        // Arrange
        _transactionController = new TransactionController(_transactionService, _mService);

        // Act
        _transactionController.ProcessTransactions;

        // Assert
    }

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

У вас есть несколько вариантов, в зависимости от того, что вы хотите проверить и насколько глубоко вы хотите его проверить.

  1. Если вы хотите проверить взаимодействие вашего контроллера с его зависимостями, вы можете использовать макет (например, макет вашего _transactionService) и указать, какие методы были вызваны на макете, с какими параметрами и т. Д. Я лично делаю не рекомендую этот тип тестов, хотя. Они делают ваш код очень устойчивым к рефакторингу. На самом деле это не тестирует то, что делает ваше приложение, а скорее как ваше приложение делает это, что для меня мало смысла.
  2. Вы можете запускать свои тесты на реальных реализациях ваших классов (без подделок). Затем вы должны сосредоточиться на проверке состояния системы (например, что находится в базе данных) после выполнения тестируемого метода. Этот вид тестов работал лучше для меня, но они требуют, чтобы вы сначала настроили базу данных с некоторыми начальными данными, что может быть большой проблемой в большой системе. Эти тесты выполняются медленно из-за связи с базой данных и особенно из-за необходимости заранее организовать состояние базы данных.
  3. Вы также можете пропустить тест контроллера или сделать его очень схематично и сосредоточиться на тестировании логики своего домена. Все еще хорошо провести несколько простых тестов, чтобы проверить, работают ли ваши контроллеры вообще.

Нет однозначного ответа на этот вопрос. Все это «зависит», но я надеюсь, что пролил некоторый свет на возможности.

0 голосов
/ 16 ноября 2018

Возможно ли, что вы сможете изменить метод для возврата bool?

public bool TryProcessTransactions() 
{
     bool wasGreatSuccess = false;

     // do work

     return wasGreatSuccess; 
}

Иначе, я думаю, вы могли бы извлечь из базы данных все, что предполагалось вставить, и Assert.IsEqual().

...