Разработка через тестирование с ASP.NET MVC - где начать?

Я соглашаюсь с г-ном Shark, но если у Вас будет экземпляр класса, необходимо будет использовать __class__ участник:

>>> class test():
...     pass
...
>>> a_test = test()
>>>
>>> a_test.__name__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: test instance has no attribute '__name__'
>>>
>>> a_test.__class__
<class __main__.test at 0x009EEDE0>
20
задан Rajan Mishra 13 September 2017 в 06:03
поделиться

4 ответа

Обычно я начинаю с набора историй для приложения, которое собираюсь разработать. На основе этого я создаю модель предметной области, обычно «на бумаге». Я систематизирую истории, которые собираюсь реализовать, и начинаю создавать модель предметной области в БД для первого набора историй.

Когда у меня есть исходная БД, я использую ORM, в моем случае LINQ to SQL , чтобы отобразить таблицы БД на набор начальных классов. Обычно я не генерирую код, генерируемый модульными тестами, поэтому это дает мне изрядное количество кода в качестве основы для начала. Затем я создаю метод-заглушку, который генерирует нереализованное исключение, чтобы реализовать одну функцию первого класса домена, с которым я работаю. Обычно я начинаю с логики проверки. Если у вас есть метод заглушки, затем вы можете использовать контекстное меню VS, чтобы создать один или несколько модульных тестов для этого метода. Тогда вы в пути.

После того, как я закончил с объектами предметной области для первой истории, я начинаю работать с аспектами MVC. Сначала я создам модели представления для первого представления. На данный момент это обычно просто пустой контейнерный класс. Затем я создам представление и строго ввожу его в модель представления. Я начну детализировать представление, добавляя свойства к модели представления, если это необходимо для представления. Обратите внимание: поскольку модель представления - это просто контейнер, с ней обычно не связаны модульные тесты. Однако он будет использоваться в последующих тестах контроллера.

После того, как представление будет завершено (или, по крайней мере, моя первоначальная концепция завершена), я затем создаю действие или действия контроллера-заглушки для него, снова метод-заглушка просто генерирует нереализованное исключение. Этого достаточно, чтобы его скомпилировать, и я смогу использовать инструменты для создания модульных тестов. При необходимости я продолжаю тестировать метод (ы) и удостоверяюсь, что он действует надлежащим образом для заданных входных данных и создает соответствующую модель представления. Если метод может создавать несколько моделей представлений, то есть отображать несколько представлений, я могу повторять процесс создания моделей представлений / представлений / кода контроллера до тех пор, пока история или истории не будут завершены.

Повторяйте при необходимости, пока ваш набор историй не будет реализован , попутно проводим рефакторинг.

11
ответ дан 30 November 2019 в 01:20
поделиться
0
ответ дан 30 November 2019 в 01:20
поделиться

Чтобы получить длинный ответ, вам следует делать такие маленькие шаги, как это.

1) -Сначала напишите неудачный тест

    [Test]
    public void AddSameTag()
    {
        UserMovie userMovie = new UserMovie();

        userMovie.AddTag("action", "dts", "dts");
        Assert.AreEqual(2, userMovie.Tags.Count);
    }

2) - Напишите простейший код для прохождения теста.

public virtual void AddTag(params string[] tags)
    {
        foreach (var text in tags)
        {
            Tag tag =new Tag(text.Trim());
            if (!movieTags.Contains(tag))
                movieTags.Add(tag);
        }
    }

3) - Рефакторинг

. Для ASP.NET MVC и стартера TDD вы можете игнорировать тест контроллера и сосредоточиться на Domain by TDD.

2
ответ дан 30 November 2019 в 01:20
поделиться

Написание модульных тестов до того, как даже объявить тестируемый класс, кажется немного экстремально в статических языках, таких как C #. Итак, вы начинаете с объявления классов домена, бросаете несколько интерфейсов, которые определяют операции, которые вы будете выполнять с этими объектами домена, а затем добавляете класс, реализующий интерфейс, оставляя методы просто генерировать NotImplementedException . В тот момент вы могли написать модульный тест для этого класса, так как все типы известны. Вы запускаете тест, который не удастся, затем вы реализуете метод и снова запускаете тест - он пройдет. Затем вы можете провести рефакторинг и оптимизировать свою реализацию, ваш модульный тест все равно должен пройти.

Когда у вас есть хорошая модель предметной области и уровень доступа к данным, вы можете перейти к веб-проекту, в котором вы создаете контроллеры, используя интерфейсы, которые вы ранее определили (создав конструктор, который принимает этот интерфейс). Вы пишете модульный тест для этого контроллера, заменяя интерфейс на фиктивный объект, чтобы вы могли тестировать действия контроллера изолированно от вашего кода доступа к данным.

И самое главное: не бойтесь добавлять классы и интерфейсы . Я видел, как люди пишут огромные методы, которые одновременно выполняют несколько задач и которые трудно протестировать. Попробуйте разделить различные задачи на методы, для которых вы могли бы легко написать спецификации: какой результат вы ожидаете для различных возможных входов.

используя интерфейсы, которые вы ранее определили (создав конструктор, который принимает этот интерфейс). Вы пишете модульный тест для этого контроллера, заменяя интерфейс фиктивным объектом, чтобы вы могли тестировать действия контроллера изолированно от вашего кода доступа к данным.

И самое главное: не бойтесь добавлять классы и интерфейсы . Я видел, как люди пишут огромные методы, которые одновременно выполняют несколько задач и которые сложно протестировать. Попробуйте разделить различные задачи на методы, для которых вы могли бы легко написать спецификации: какой результат вы ожидаете для различных возможных входов.

используя интерфейсы, которые вы ранее определили (создав конструктор, который принимает этот интерфейс). Вы пишете модульный тест для этого контроллера, заменяя интерфейс фиктивным объектом, чтобы вы могли тестировать действия контроллера изолированно от вашего кода доступа к данным.

И самое главное: не бойтесь добавлять классы и интерфейсы . Я видел, как люди пишут огромные методы, которые одновременно выполняют несколько задач и которые сложно протестировать. Попробуйте разделить различные задачи на методы, для которых вы могли бы легко написать спецификации: какой результат вы ожидаете для различных возможных входов.

И самое главное: не бойтесь добавлять классы и интерфейсы. Я видел, как люди пишут огромные методы, которые одновременно выполняют несколько задач и которые трудно протестировать. Попробуйте разделить различные задачи на методы, для которых вы могли бы легко написать спецификации: какой результат вы ожидаете для различных возможных входов.

И самое главное: не бойтесь добавлять классы и интерфейсы. Я видел, как люди пишут огромные методы, которые одновременно выполняют несколько задач и которые трудно протестировать. Попробуйте разделить различные задачи на методы, для которых вы могли бы легко написать спецификации: какой результат вы ожидаете для различных возможных входов.

3
ответ дан 30 November 2019 в 01:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: