У меня есть класс репозитория
public class PersonRepository : IPersonRepository
{
private DataContext _context;
public PersonRepository(DataContext context)
{
_context = context;
}
public List<PersonDto> Fetch() ......
}
У меня есть ServiceStack PersonsService
public class PersonsServices : Service
{
private IPersonsRepository _personRepo;
public PersonsServices(IPersonsRepository personRepository)
{
_personRepo = personRepository;
}
public object Any(GetPersons request)
{
return new GetPersonssResponse
{
Results = _personsRepo.Fetch()
};
}
}
Мой код отлично работает в приложении ServiceStack, так как DataContext вводится .Net Coreкак настроено в методе AddDbContext в Startup.cs
services.AddDbContext<DataContext>(x => x
.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
Как мне сделать это в модульном тесте в сочетании с ServiceStack и использованием .Net Core Entity Framework?
Мне нужно что-то эквивалентноев AddDbContext здесь.В конечном итоге моя цель - создать модульные тесты, которые используют контекст в памяти или SQLite, но сохраняют тот же код хранилища.
РЕДАКТИРОВАТЬ: Вот как выглядит мой модульный тест до сих пор.
[TestFixture]
public class PersonTest
{
private ServiceStackHost appHost;
[SetUp]
public void TestFixtureSetUp()
{
appHost = new BasicAppHost().Init();
var container = appHost.Container;
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
var optionsBuilder = new DbContextOptionsBuilder<DataContext>();
optionsBuilder
.UseSqlite(configuration.GetConnectionString("DefaultConnection"));
// КАК ПОЛУЧИТЬ SERVICESTACK / FUNQ, чтобы РАЗРЕШИТЬ DataContext В Хранилище ???
**container.Register<IDataContext>(i => new DataContext(optionsBuilder.Options)).ReusedWithin(ReuseScope.Request);**
container.RegisterAutoWiredAs<PersonRepository, IPersonRepository>();
}
[Test]
public async Task GetPersons()
{
var service = appHost.Container.Resolve<PersonsServices>();
var response = await service.Any(new GetPersons { });
var results = (GetPersonsResponse)response;
Assert.That(1 == 1);
}
[TearDown]
public void TestFixtureTearDown()
{
appHost.Dispose();
}
}