Модульное тестирование класса имеет много частных методов и обширную логику - PullRequest
0 голосов
/ 20 января 2020

У меня есть один метод publi c, который вызывает много частных методов, и эти частные методы устанавливают некоторые значения для запроса объекта. один из закрытых методов делает вызов API, используя этот объект в качестве параметра и возвращает ответ. Используя это значение ответа, я вызываю другой приватный метод что-то сделать.

Ниже вы можете увидеть пример структуры моего класса. Частные методы - это более 4 методов, каждый из которых имеет очень длинный лог c и в основном относится к этому классу. Я не использую их в любом другом классе. Они только устанавливают много свойств объекта. Для некоторых из них требуются поля для API.

В модульном тесте я высмеиваю вспомогательный класс и вызываю метод publi c. Таким образом, я отлаживаю приватные методы, но мне нужно назначить около 40 значений по умолчанию для вызова API и продолжить тестирование. Кроме того, если я изменю значение некоторой переменной, ожидаемые результаты будут другими.

В результате, как я могу эффективно провести модульный тест для этого класса? Кажется, что-то не так, но я не знаю, как я могу изменить структуру своего класса и проверить это? Кроме того, тестирование, как этот способ, является интеграционным тестом или модульным тестом? Я так растерялся. Любая помощь будет оценена.

public class SampleClassBase {
  have around 40 variables
}
 public class SampleClass : SampleClassBase
    {
        private IHelper _helper;
        private string someText;

        public SampleClass(IHelper helper)
        {
            _helper = helper;
        }
        public void DoSomething()
        {
            RequestObject obj = new RequestObject();
            SetAddress(ref obj);
            SetBillingInfo(ref obj);
            DoApiCall(ref obj);
        }

        private void SetAddress(ref RequestObject obj)
        {
            //set some values from SampleClass variables to obj fields. There are around 10-15 fields and have some null controls for them.  
            // There can be also another method call from helper class or base class
        }

        private void SetBillingInfo(RequestObject obj)
        {
              //set some values from SampleClass variables to obj fields.  There are around 10-15 fields and have some null controls for them.  
            // There can be also another method call from helper class or base class
        }

        private void DoApiCall(RequestObject obj)
        {
            // I mock this api call using moq framework. 
            var response = _helper.DoCall(obj);

            //Here I have lots of controls and finally it assign value to someText
            someText = response.value;
            SaveFile();
        }

        private void SaveFile()
        {
            //do things using someText property. Mainly saving a pdf file
        }

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