Общие модульные тесты для интерфейсов - PullRequest
0 голосов
/ 03 сентября 2018

Существует ли коллекция модульных тестов, которая проверит правильность моей реализации интерфейса? В частности, я использую реализацию ISet<T> и хотел бы включить ее в модульный тест, чтобы убедиться, что моя реализация верна. (Вместо того, чтобы придумывать 5-20 единичных тестов для хорошего покрытия)

Казалось бы, для всех интерфейсов могут быть написаны общие модульные тесты.

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018
0 голосов
/ 03 сентября 2018

Есть полезный пост по этому вопросу в Software Engineering код будет выглядеть примерно так:

private void Test<TService,TFilter>(string urlSuffix) 
    where TService : SoapHttpClientProtocol, new() 
    where TFilter : new() 
{
    string serviceUrl = Helper.GetBaseUrl() + urlSuffix;
    TService service = new TService();
    service.Credentials = Helper.GetCredentials();
    service.Url = serviceUrl;
    TFilter[] filter = { new TFilter() };
    service.ReadMultiple(filter, null, 0);
}

[TestMethod]
public void PlaceOfWork()
{
    Test<PlaceOfWork_Service,PlaceOfWork_Filter>("PlaceOfWork");
}

Это универсальный метод для имитации подключения и доступа к сервису, но он также может быть легко применен к интерфейсам.

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

  1. Скоро станет неясно, что вы тестируете в каждом интерфейсе

  2. Если ваш тест не пройден после первого, вы не сможете обнаружить больше ошибок, что приведет к сбойному маскированию. .

Проверьте это решение, немного дергайте его, чтобы понять все его преимущества и недостатки, а также прочитать похожие посты.

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