//Classe
public class Carro{
public int Codigo {get; set; }
public string Descricao { get; set; }
}
//Contexto
public class MeuContexto
{
public virtual DbSet<Carro> Carro { get; set; }
}
//Repositório
public class CarroRepositorio
{
public CarroRepositorio(MeuContexto contexto) : base (contexto) { }
public virtual int NovoCodigo()
{
return context.Carro.Max(c => c.Codigo) += 1;
}
}
//Serviço
public class CarroService
{
CarroRepositorio repCarro;
public CarroService(MeuContexto context) : base(context)
{
repCarro = new CarroRepositorio(context)
}
public virtual Carro Buscar(int Id)
{
return repCarro.Listar().Where(model => model.Codigo == Id).FirstOrDefault();
}
}
//Testes Com Repositorio que Funciona
[TestMethod]
public void RetornarProximaPlacaComRepositorio()
{
var _Carros = new List<Carro>{
new Carro() { Codigo = 1, Descricao = "Gol" },
new Carro() { Codigo = 2, Descricao = "Uno" }
}.AsQueryable();
var DbSet = new Mock<DbSet<Carro>>();
DbSet.As<IQueryable<Carro>>().Setup(m => m.Provider).Returns(_Carros.Provider);
DbSet.As<IQueryable<Carro>>().Setup(m => m.Expression).Returns(_Carros.Expression);
DbSet.As<IQueryable<Carro>>().Setup(m => m.ElementType).Returns(_Carros.ElementType);
DbSet.As<IQueryable<Carro>>().Setup(m => m.GetEnumerator()).Returns(_Carros.GetEnumerator());
var Contexto_Mocado = new Mock<MeuContexto>();
var repositorio = new CarroRepositorio(Contexto_Mocado.Object);
var ProximoCodigo = repositorio.NovoCodigo();
var QuantidadeDeCarros = Contexto_Mocado.Object.Carro.ToList();
Assert.AreEqual(2, QuantidadeDeCarros.Count());
Assert.AreEqual(3, ProximoCodigo);
}
//Testes Com Serviço que não Funciona
[TestMethod]
public void BuscarCarroComServico()
{
var Contexto_Mocado = new Mock<GesCooperContext>();
var repositorio = new Mock<CarroRepositorio>(Contexto_Mocado);
var servico = new Mock<CarroService>(repositorio.Object.context);
var Retorno = servico.Object.Buscar(1);
Assert.AreEqual("Gol", Retorno.FirstOrDefault);
}
Nesse momento queria que o serviço ficasse com o repositório mocado que funciona no primeiro teste e então buscar no mesmo contexto sem precisar setar o Setup para o serviço, conforme a seguir:
[ servico.Setup(s => s.Buscar(1)).Returns(new Carro { Codigo = 1, Descricao = "Gol"}); ]
Alguém sabe se é possível configurar alguma variável do Mock para este objetivo?