Я использую API, который взаимодействует с БД. Этот API имеет методы для запроса, загрузки и сохранения элементов в БД. Я написал интеграционные тесты, которые делают такие вещи, как создание нового экземпляра, а затем проверяют, что когда я делаю запрос для этого экземпляра, правильный экземпляр найден. Это все хорошо.
Я хотел бы иметь более быстрые модульные тесты для этого кода, но мне интересно узнать о полезности любого модульного теста и о том, действительно ли они мне что-то дают. например, допустим, у меня есть класс для сохранения некоторого элемента, который у меня есть, через API. Это код psuedo, но вы поймете, как работает API, который я использую.
public class ElementSaver
{
private ITheApi m_api;
public bool SaveElement(IElement newElement, IElement linkedElement)
{
IntPtr elemPtr = m_api.CreateNewElement()
if (elemPtr==IntPtr.Zero)
{
return false;
}
if (m_api.SetElementAttribute(elemPtr,newElement.AttributeName,newElement.AttributeValue)==false)
{
return false;
}
if (m_api.SaveElement(elemPtr)==false)
{
return false;
}
IntPtr linkedElemPtr = m_api.GetElementById(linkedElement.Id)
if (linkedElemPtr==IntPtr.Zero)
{
return false;
}
if (m_api.LinkElements(elemPtr,linkedElemPtr)==false)
{
return false;
}
return true;
}
}
стоит ли писать модульные тесты, которые макетируют член m_api? кажется, что я могу проверить, что если какой-либо из различных вызовов потерпит неудачу, возвращается false, и что, если все различные вызовы завершатся успешно, будет возвращено значение true, и я мог бы установить ожидания, что различные методы вызываются с ожидаемыми параметрами, но это полезно? Если бы я реорганизовал этот код так, чтобы он использовал несколько другие методы API, но достиг того же результата, это сломало бы мои тесты, и мне нужно было бы их изменить. Эта хрупкость не кажется очень полезной.
Стоит ли беспокоиться о модульных тестах для подобного кода или просто придерживаться имеющихся интеграционных тестов?