1. Общие замечания · Многие тесты не являются unit-тестами, в них тестируется совокупность классов. · Тесты содержат очень много дублирования и ненужных деталей. · Ненужное использование DI контейнера во многих тестах. · Классы имеют размытые обязанности и неявные зависимости через DI контейнер. 2. Core, CoreTest · Слишком много обязанностей (отсюда - ни о чем не говорящее имя класса), в результате чего тестирование оказывается неоправданно сложным (2 мока, 5 зарегистрированных классов в контейнере – и все для того, чтобы проверить цикл for создания рабочих потоков). · Использование Callback() для подсчета числа вызовов моков вместо Verify(…, Times.Exactly()). · IteratorIterationStart – слишком длинный, выполненный на низком уровне абстракции метод. · Зависимости класса – неявные, что стало следствием использования DI контейнера. 3. FileGenerationStorage, FileGenerationStorageTest · Из тестов трудно понять, что именно тестируется – слишком много деталей. Проверку того, что файл содержит только ожидаемые строки можно было, например, вынести в метод CheckIfFileContainsOnly(expectedUrls). Создание случайного списка строк – тоже. В результате тест сократился бы до нескольких легко читаемых строк. 4. HttpParseSource, HttpParseSourceTest · Создание случайного списка строк занимает половину теста. · Не понятен смысл использования DI контейнера в тестах (почему бы просто не создать экземпляр HttpParseSource и не присвоить mock (странное имя) его свойству Source)