Как вынудить MSTEST TestMethod сбросить все одиночные элементы/помехи перед выполнением?

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

13
задан Community 23 May 2017 в 11:52
поделиться

4 ответа

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

Это сообщение на форумах MSDN показывает, как обработать ситуацию, если у Вас только есть несколько помех, которые должны быть сброшены. Это действительно упоминает некоторые опции (например, использование Отражения и PrivateType).

я продолжаю приветствовать дальнейшие идеи, особенно если я пропускаю что-то очевидное о MSTEST.

7
ответ дан 2 December 2019 в 00:04
поделиться

Добавьте помощника в своих тестах, который использует отражение для удаления одноэлементного экземпляра (можно добавить метод сброса к одиночному элементу также, но я был бы обеспокоен его использованием). Что-то как:

public static class SingletonHelper {
            public static void CleanDALFactory() 
            {
                    typeof(DalFactory)
                        .GetField("_instance",BindingFlags.Static | BindingFlags.NonPublic)
                        .SetValue(null, null);
            }
}

Вызов это в Вашем методе TestInitialize. [Я знаю, что это "очищает мир", но только необходимо записать метод однажды в помощнике на одиночный элемент, его очень тривиальное, и дает Вам явный контроль]

6
ответ дан 2 December 2019 в 00:04
поделиться

Я думаю, что Вы ищете атрибут TestIntialize и атрибут TestCleanUp. Вот блог MSDN, показывающий порядок выполнения текст ссылки

2
ответ дан 2 December 2019 в 00:04
поделиться

У нас была подобная проблема, возникают с нашим MSTests. Мы обработали его путем вызывания функции вначале и конца определенных тестов, которым был нужен он.

Мы храним тестовую дату истечения срока в нашей конфигурации приложения. Трем тестам была нужна эта дата для попадения в определенный диапазон для определения соответствующих значений. Путем наше приложение настраивается, значения конфигурации были бы только сброшены, если бы не было значения, присвоенного на сессии. Так, мы создали две новых частных статических функции - одна для явного устанавливания значения конфигурации на указанную дату и один для очистки той даты от сессии после тестовых прогонов. В наших трех тестах мы вызвали эти две функции. Когда следующие тестовые прогоны, приложение видит пустое значение для даты и повторно выбирает ее от конфигурационного файла.

я не уверен, полезно ли это, но именно так мы работали вокруг нашей подобной проблемы.

1
ответ дан 2 December 2019 в 00:04
поделиться
Другие вопросы по тегам:

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