WaitForPendingFinalizers сборщика мусора зависает при использовании из другого потока в тестовой среде VisualStudio - PullRequest
0 голосов
/ 27 сентября 2019

Метод, который мы тестируем при модульном тесте, должен вызывать сборщик мусора в другом потоке (это необходимо, чтобы избежать сбоя приложения, когда оно использует много оперативной памяти).Чтобы устранить возможные взаимоблокировки финализатора из нашего кода, мы написали следующий тест (Wait.For просто периодически проверяет, имеет ли значение m_ActionFinished значение true):

  [TestClass]
  public class UnitTest1
  {
    [TestMethod]
    public void TestMethod1()
    {
      Thread newThread = new Thread( CollectGarbage );
      newThread.Start();

      Wait.For( () => m_ActionFinished );
    }

    private void CollectGarbage()
    {
        GC.Collect();
        GC.WaitForPendingFinalizers();
        m_ActionFinished = true;
    }

    private Boolean m_ActionFinished = false;
  }

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

Мы используем .NET Framework 4.7.2 с MSTest.TestAdapter v1.3.2 и MSTest.TestFramework v.1.3.2 в Visual Studio 2019 v.16.3.1.

Примечание:Этот тест проходит нормально в .NET Core, возможно потому, что вызов его сборщика мусора не гарантирует, что финализаторы будут вызываться в соответствии со спецификациями.

У кого-нибудь еще была эта проблема?Это специфично для одной версии MSTest / runtime?

Редактировать: тест также проходит нормально с использованием Visual Studio 2017.

Редактировать: После тестирования с различными версиями инфраструктуры тестирования в VS 2017 и VS 2019 я подтверждаю, что это ошибка в Visual Studio2019

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...