Когда я создавал прототипы / тестировал / экспериментировал / проводил тестирование на C # в Visual Studio (я также недавно начал использовать код Visual Studio и делаю то же самое), я привык злоупотреблять модульным тестированием, выполняя такие вещи:
public class Blah
{
[Test] public void create_db() { ... }
[Test] public void populate_large_dataset() { ... }
[Test] public void populate_small_dataset() { ... }
[Test] public void mutate_data_method1() { ... }
[Test] public void mutate_data_method2() { ... }
[Test] public void mutate_data_method3() { ... }
[Test] public void benchmark_1() { ... }
[Test] public void benchmark_2() { ... }
}
Это конкретный пример, связанный с недавними заданиями, но исторически я обнаружил, что этот вид рабочего процесса был полезным в тех областях, где я делаю вещи на стадии прототипа / проверки концепции.Основная идея заключалась в том, что у меня была куча точек входа, которые в основном являются методами, и мне относительно легко выбрать и произвольно запустить одну из них - либо с помощью горячих клавиш, либо с помощью 1-2 нажатий с помощью Resharper (или Visual Studio xUnit? Или VisualStudio Code .NET Core Test Explorer) Unit Test Explorer.
Я знаю, что это неправильное использование, но пока во всех моих поисках я не нашел лучшей альтернативы, которая предполагает, что я, вероятно, не ищуправильные термины, так как трудно представить, что я одинок в подобных вещах.
В VSCode (к которому я, безусловно, очень новичок) это кажется особенно проблематичным, поскольку VSCode постоянно втягивается вочень запутанное состояние (кажется, что остатки тестов имеют тенденцию работать в фоновом режиме и оставаться в живых, несмотря на то, что не создается впечатление, что они делают это. Это, вероятно, очень разумное поведение, если я не злоупотреблял им так, как я).Это стало достаточно болезненным моментом, и я хотел бы знать, что я должен делать.
Возможные альтернативы, которые я рассмотрел:
- Создание нескольких проектов, каждый из которых представляет каждую точку входа - это кажется невероятно сложным и мучительно громоздким
- Имеется один основной метод, и каждый раз, когда я хочу запустить другую функцию, я редактирую ее для вызова соответствующего метода -также довольно громоздкий
- Отредактируйте csproj, чтобы иметь кучу разных целей, которые запускаются
- DIY - напишите свой собственный интерфейс / CLI всделать это
- Похоже, немало работы, чтобы сделать это правильно.Я чувствую, что в основном переписываю участников модульных тестов, из-за которых происходит LOT за кулисами.
Мой идеальный рабочий процесс:
- Создать метод в моем коде (что-то вроде
public static void Foo()
) - Уметь запускать его с помощью точки и щелчка или горячей клавиши, подобно тому, как выполняются модульные тесты.Аналогичные правила в отношении обработки ошибок были бы выполнены (например, если метод не является статическим, то я ожидаю, что он попытается создать экземпляр экземпляра содержащего класса, но потерпит неудачу, если он не может, или ошибку, если метод принимает аргументы)
Я не хочу переходить к другим файлам, чтобы написать набор вспомогательного кода, который в основном предоставляет ссылки и точки вызова для Foo()
, которые я должен был бы обновить, если я переименую илиудалить Foo()
.
Что такое «лучшая практика» здесь?Я думаю об этом неправильно?Я развиваюсь неправильно?