Тестирование на основе состояния и взаимодействия для методов, вызывающих другие методы модульного тестирования

#c# #unit-testing

Вопрос:

У меня есть служба проверки с методом проверки основного объекта. Затем у меня есть отдельные методы для проверки различных свойств объекта. Если какая — либо проверка завершается неудачно, выдается сообщение об ошибке.

 public void ValidateObject(Object object, TestEnum enum, bool required)
{
    if(enum == TestEnum.A)
    {
        ValidateObjectPropertyA(object.PropertyA, required);
        ValidateObjectPropertyB(object.PropertyB, required);
        //Other Calls to Validation Methods
    }
    else
    {
        if(enum == TestEnum.C)
        {
            required = false;
        }

        ValidateObjectPropertyC(object.PropertyC, required);
        //Other Calls to Validation Methods
    }
}

public void ValidateObjectPropertyA(PropertyA propertyA, bool required)
{
    if(propertyA == null amp;amp; required)
    {
        throw Exception...........
    }

    if(other logic)
    {
        throw Exception...........
    }
}
 

Я провел модульное тестирование методов, которые проверяют свойства (ValidateObjectPropertyA/B/C и т. Д.), И теперь я не уверен в том, как лучше всего провести модульное тестирование основного метода «ValidateObject».

До сих пор мои варианты, похоже, либо:

A) Имитируйте вызовы методов «ValidateObjectProperty» и убедитесь, что правильные значения передаются в

Положительный результат: я могу проверить, что методы вызываются с правильными значениями.

Отрицательно: я не могу проверить, что происходит ожидаемый результат, поэтому, если поведение изменилось в базовом методе ValidateObjectProperty, издевательский тест не провалится.

или

Б) Добавьте тесты для метода ValidateObject, которые вызывают методы «ValidateObjectProperty», и проверьте несколько ожидаемых случаев сбоя для каждого свойства.

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

Отрицательно: я, по сути, дублирую тесты, которые уже были написаны для отдельных методов ValidateObjectProperty

Какой подход (или какой другой подход), по вашему мнению, наиболее подходит для этого сценария и почему?