Как один модуль тестирует сервис, который подключается к базе данных?
У меня есть класс playerRepository
на уровне доступа к данным, который напрямую взаимодействует с базой данных, и класс playerService
на бизнес-уровне, который создает экземпляр playerRepository
и обслуживает случайные вещи, такие как - удаление игрока, сохранение игрока , получение всех игроков, получение игрока по идентификатору / имени yadda yadda.
Я хочу провести модульное тестирование playerService
без использования реальной базы данных, но с использованием базы данных в памяти, поставляемой с EF.
Проблема в том, что я не могу понять, как его настроить.
У меня есть класс PlayerContext : DbContext
, который используется в качестве модели для кодирования вначале (это было сделано в руководстве по EF). И я должен добавить параметр в конструктор DbContextOptionsBuilder<PlayerContext>
, но я не знаю, с чего начать. Я не знаю, как и где настроить строку подключения, где хранится база данных «по умолчанию».
Я хочу сделать это, используя EF без NSubstitute или Moq, я делаю это, чтобы узнать, как это делается без использования других фреймворков, кроме EF.
public class PlayerContext : DbContext
{
public PlayerContext() : base()
{
}
public DbSet<Player> Players { get; set; }
}
public class Player
{
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int DciNumber { get; set; }
}
Я использую Visual Studio при условии модульного тестирования
[TestClass]
public class PlayerServiceTest
{
// Should get all the players from database
[TestMethod]
public void GetAllPlayers()
{
// arrange - act
// TODO: Return all the players from the database
// assert
// TODO: Should return empty list
}
И класс PlayerService выглядит примерно так
public class PlayerService
{
private PlayerRepository _playerRepository = new PlayerRepository();
public List<Player> GetAllPlayers()
{
var players = _playerRepository.GetAllPlayers();
return players;
}
PlayerRepository
public class PlayerRepository
{
public List<Player> GetAllPlayers()
{
using (var context = new PlayerContext())
{
var players = context.Players.ToList();
return players;
}
}
Обычно мои вопросы:
Как создать PlayerContext
с другой строкой подключения, которая подключается к базе данных в памяти в случае модульного теста, а также как обеспечить ее правильной строкой подключения, если она не выполняется с помощью модульных тестов
Как изменить местоположение базы данных, поскольку она использует путь по умолчанию в C:\Users
.
Я не ищу интеграционных тестов с DAL PlayerRepository
, я просто хочу протестировать бизнес-уровень, и все, что мне нужно, это когда я запускаю тесты, которые PlayerService использует PlayerRepository, который подключается к оперативной памяти база данных и все тут. В противном случае он должен подключиться к локальной базе данных, хранящейся в той же папке, что и основной исполняемый файл приложения
Требуется помощь!