Я пытаюсь запустить модульные тесты в проекте, но это прерывается из-за исключения переполнения стека.
похоже, что вызовов много, но я не могу понять, в чем проблема и как ее решить. Может быть, дело в том, как я настраиваю тесты
вот мой код настройки и настройки для тестов. как видите, я вызываю метод _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
);
, поэтому я разделил этот запрос по условиям, и моя проблема была решена. Но я не совсем понимаю, почему
СПАСИБО