Тестовые случаи Xunit выполняются бесконечно

#c# #asp.net #.net #xunit #xunit.net

Вопрос:

Использование .net core с c# здесь и использование moq и xunit для тестирования. У меня есть свои модульные тестовые примеры, структурированные следующим образом:

 namespace App.Test
{
   public class Controller1Tests
   {
       [Fact]
        public void Test1()
        {
          
        }
        //many more tests
   }   
   
}   

namespace App.Test
{
   public class Controller2Tests
   {
       [Fact]
        public void Test2()
        {
          
        }
        //many more tests
   }   
   
}   
namespace App.Test
{
   public class DataServiceTests
   {
       [Fact]
        public void Test3()
        {
          
        }
        //many more tests
   }
}
 

Выше приведен только пример, но у меня около 8 классов, и в каждом из них по 7-8 тестов. В моем текстовом проводнике, когда я щелкаю правой кнопкой мыши по каждому классу в отдельности и запускаю тесты, все тесты выполняются нормально и быстро в течение 5-6 секунд. Но когда я щелкаю правой кнопкой мыши пространство имен App.Test и запускаю тесты, все тесты моего класса начинают выполняться параллельно, и процесс никогда не заканчивается. Тесты продолжают выполняться и выполняться, я не вижу ошибок или предупреждений, я должен прекратить выполнение тестов, чтобы остановить процесс.

Я не уверен, как действовать и где искать проблему. Может ли кто — нибудь указать, в чем может быть проблема?

Спасибо

Комментарии:

1. проверьте наличие общих ресурсов между испытуемыми. Если тесты/SUT содержат асинхронный код, также проверьте, есть ли у вас какие-либо блокирующие вызовы или код, который может привести к взаимоблокировке. Тупик, скорее всего, может объяснить, почему тест никогда не заканчивается.

2. Похоже, что это может быть так, я использую aws dynamo db, snowflake и инициализацию s3 среди этих классов, и это может быть причиной того, что, поскольку все эти тесты запускаются параллельно, это создает тупик. Каков лучший способ решить эту проблему? Есть ли способ упомянуть в классе, чтобы запустить его последовательно, может быть, сначала запускается класс 1, и как только все его тесты будут выполнены, затем класс 2 и так далее.

3. Это интеграционное тестирование или модульное тестирование? Я бы предложил пересмотреть текущий дизайн кода и убедиться, что код достаточно разобщен, чтобы тесты могли выполняться изолированно друг от друга без побочных эффектов, которые могут вызвать проблемы, с которыми вы сталкиваетесь. Выполнение в последовательности, как вы хотите, приведет к тому, что выполнение тестов займет намного больше времени.

4. Поэтому я заставил тесты выполняться последовательно, добавив [Коллекция(«Последовательная»)] в верхней части класса. С этим все мои тесты прошли нормально, не добавив дополнительного времени. Опять же, это может быть не идеальным решением, но мы оставим это пока, пока мы не рассмотрим этот вопрос подробнее.

5. Круто. Рад, что вы нашли приемлемое решение.