Ошибка переполнения стека в модульном тесте (Resharper, C#, NUnit). тест прерван - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь запустить модульные тесты в проекте, но это прерывается из-за исключения переполнения стека.

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

вот мой код настройки и настройки для тестов. как видите, я вызываю метод _dataQuery.Execute(TestTime), и после этого сеанс прерывается. Этот метод хорошо работает в основном проекте

Надеюсь на вашу помощь!

      internal abstract class PermissionsTests
      {
           protected static DateTime TestTime;
           protected ILifetimeScope Scope;
           private MyDbContext _dbContext;

           [OneTimeSetUp]
           public void Setup()
           {

            var options = new DbContextOptionsBuilder<MyDbContext>()
                .UseInMemoryDatabase(databaseName: "PermissionsTests")
                .EnableSensitiveDataLogging()
                .Options;
            _dbContext = new MyDbContext(options);

            Scope = ConfigureContainer()
                .BeginLifetimeScope(b =>
                    b.RegisterInstance(new FakeUserQuery(_dbContext)).AsImplementedInterfaces());

            if (!_dbContext.Database.EnsureCreated()) return;
            TestTime = DateTime.UtcNow;

            //seed data to database
           }
      }

     internal abstract class DataPermissionsTests : PermissionsTests
    {
        [OneTimeSetUp]
        public void SetupCustom()
        {
            _dataQuery = Scope.Resolve<IDataQuery>();

            _login = new LoginAsAttribute(userId);
            _login.Login();

            Userdata = _dataQuery.Execute(TestTime);          
             //exception are inside this method. includes some queries
             //needed to get data from database for test user       

            _login.Logout();       
        }
    }

UPD

Я следовал советам и отлаживал каждый мельчайший шаг в моем тесте и Я нашел метод, в котором исключение является defenetly (оно падает при выполнении этого запроса):

var serviceDocuments = dbContext.ServiceDocumentRelations
                .AsNoTracking()
                .Where(x =>
                    x.ServiceInfo.Updated.At >= criteria ||
                    x.Document.ServiceInfo.Updated.At >= criteria ||
                    x.Biography.ServiceInfo.Updated.At >= criteria ||
                    x.Event.ServiceInfo.Updated.At >= criteria ||
                    x.Event.Participants.AsQueryable().Any(p => 
                           p.ServiceInfo.Updated.At >= criteria) ||
                    x.Company.ServiceInfo.Updated.At >= criteria ||
                    x.News.ServiceInfo.Updated.At >= criteria ||
                    x.Media.ServiceInfo.Updated.At >= criteria ||
                    x.Note.ServiceInfo.Updated.At >= criteria ||
                    x.Assignment.ServiceInfo.Updated.At >= criteria ||
                    x.AssignmentPerformer.ServiceInfo.Updated.At >= criteria ||
                    x.PhotoUserSettings.ServiceInfo.Updated.At >= criteria ||
                    x.BackgroundUserSettings.ServiceInfo.Updated.At >= criteria
                );

, поэтому я разделил этот запрос по условиям, и моя проблема была решена. Но я не совсем понимаю, почему

СПАСИБО

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