Следующая строка в вашем хранилище проблематична:
DataContext db = new DataContext();
Это не позволит вам провести модульное тестирование этого класса изолированно, поскольку вы сильно привязали его к какому-то определенному классу доступа к данным.
Вы можете определить абстракцию:
public interface IMyDataContext
{
DbSet<Couple> Couples { get; set; }
DbSet<Role> Roles { get; set; }
int SaveChanges();
}
, а затем предоставить некоторую реализацию:
public class DataContext : DbContext, IMyDataContext
{
public DbSet<Couple> Couples { get; set; }
public DbSet<Role> Roles { get; set; }
}
Теперь ваш репозиторий должен работать только с абстракцией:
public class Repository : IRepository
{
private readonly IMyDataContext _db;
public Repository(IMyDataContext db)
{
_db = db;
}
public void AddCouple(Couple couple)
{
var role = (from r in _db.Roles
where r.Name == "Couple"
select r).SingleOrDefault();
couple.Roles.Add(role);
_db.Couples.Add(entity);
_db.SaveChanges();
}
}
Сейчасв своем модульном тесте вы могли бы использовать фиктивную инфраструктуру для передачи поддельного контекста в хранилище и иметь возможность тестировать его изолированно.