Юниттесты для статических классов - что, если не fakes?
От: Artem Korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 27.06.16 18:42
Оценка:
Нужно покрыть тестами некоторый функционал, который завязан на нескольких статических классах. Если конкретно, то статические классы из Azure SDK и относятся к Azure Storage Table.
Есть ли какие-то вменяемые способы изолировать свой код от статических классов чтоб написать юниттесты? Сейчас написали тесты с использованием Microsoft Fakes, но эта фича доступна только в Enterprise версии Visual Studio, а руководство пересаживает нас на Visual Studio Professional, в которой этих самых Fakes нет.
Я попробовал ввести дополнительный слой абстракции чтоб изолировать статические классы и вызывать их косвенно, через свою собственную обёртку. Но результат мне не понравился. В классах вроде CloudTable или TableOperation куча методов и писать обёртку под каждый из методов — мартышкин труд.
Есть ли какой-то более правильный подход к таким юниттестам?
С уважением, Artem Korneev.
Re: Юниттесты для статических классов - что, если не fakes?
От: Mr.Delphist  
Дата: 28.06.16 16:49
Оценка:
Здравствуйте, Artem Korneev, Вы писали:

AK>В классах вроде CloudTable или TableOperation куча методов и писать обёртку под каждый из методов — мартышкин труд.

AK>Есть ли какой-то более правильный подход к таким юниттестам?

Так не надо делать моки 1:1, надо опираться на юз-кейсы. Тогда выяснится, что для каждого юз-кейса хватит частичных врапперов (остальное пусть смело кидает NotImplemented, как это и генерится Студией в ответ на "реализовать интерфейс"). Ну и да, на каждый юз-кейс может быть свой вариант враппера одного и того же статического класса.

Если всё вышесказанное мимо — покажите пример кода, с чем боретесь.
Re[2]: Юниттесты для статических классов - что, если не fakes?
От: Artem Korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 30.06.16 08:48
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

MD>Так не надо делать моки 1:1, надо опираться на юз-кейсы. Тогда выяснится, что для каждого юз-кейса хватит частичных врапперов (остальное пусть смело кидает NotImplemented, как это и генерится Студией в ответ на "реализовать интерфейс"). Ну и да, на каждый юз-кейс может быть свой вариант враппера одного и того же статического класса.


Так ведь кинуть NotImplemented — примерно столько же писанины, что и вызвать нужную реализацию из целевого класса.
Для примера — статический класс CloudTable. Можно, конечно, написать врапперы для десятка методов, которые сейчас используются. Но наши библиотеки будут потом использоваться несколькими командами, меня закидают помидорами, если я выдам куцую версию такого функционала.
С уважением, Artem Korneev.
Re[3]: Юниттесты для статических классов - что, если не fakes?
От: Sinix  
Дата: 30.06.16 10:19
Оценка: +1
Здравствуйте, Artem Korneev, Вы писали:

А не проще такие штуки в integration tests перенести?
Один фиг вы рано или поздно Azure Storage Emulator будете подрубать для тестов.
Re[4]: Юниттесты для статических классов - что, если не fakes?
От: Artem Korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 01.07.16 01:54
Оценка:
Здравствуйте, Sinix, Вы писали:

S>А не проще такие штуки в integration tests перенести?


Integration tests для этой части уже есть.
Тут другое. Менеджеры хотят "80%+ code coverage", приходится заниматься ерундой, писать тесты просто "чтоб было".
Я пока написал через Microsoft Fakes, но не хочется связываться с fakes — сложно, громоздко и требует VS Enterprise. Вот подумываю, как бы от этого дела избавиться.

S>Один фиг вы рано или поздно Azure Storage Emulator будете подрубать для тестов.


Уже. В функциональных тестах.
В юниттестах стоят костыли чтоб получить нужный test coverage.
С уважением, Artem Korneev.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.