Очистить все статические данные после каждого теста в MSTest - PullRequest
0 голосов
/ 03 октября 2019

Я хочу написать тесты для моей библиотеки с помощью MSTest. После запуска TestCase1 он что-то делает, устанавливает MyData (закрытое статическое поле внутреннего класса моей библиотеки) следующим образом:

internal MyClass{private static int MyData;}

При запуске TestCase2 эти данные будут повторно использоваться.

Iнаписали метод Reset и вызвали его в содержимом метода TestInitialize, например:

var type = MyAssembly.GetType("MyClass");
var privateType = new PrivateType(type);
privateType.SetStaticField("MyData", 0);

Как видите, метод сбросит статическое поле на 0, но ему нужно знать имя атрибута и класса ("MyClass""и" MyData ").

Теперь, я тестирую с моей обфусцированной dll, тест не пройден, потому что имя будет изменено. Кроме того, в моей библиотеке, я имею в виду сторонние библиотеки, она также может хранить данные в статических полях. Это заставит TestCase2 повторно использовать данные, которые были установлены TestCase1, и TestCase2 всегда будет неуспешным.

Как я могу сбросить все статические поля в TestInitialize?

** ОБНОВЛЕНИЕ:

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

1 Ответ

0 голосов
/ 07 октября 2019

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

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

Сохранение данных в статическом поледействительно плохая идея . НЕ делайте этого, если эти данные НЕ СТАТИЧЕСКИЕ.

...