public void deveEmpurrarParaOProximoDiaUtil()
        {
            var leilaoDao = new Mock<LeilaoDaoFalso>();
            var avaliador = new Avaliador();
            var pagamentoDao = new Mock<PagamentoDao>();

            CriadorDeLeiloes criador = new CriadorDeLeiloes();

            List<Leilao> leiloes = new List<Leilao>();

            leiloes.Add(criador.Para("Bicicleta Ergometrica", new DateTime(2016, 01, 25))
                                .Lance(new Usuario("Sebastião"), 500d)
                                .Lance(new Usuario("Daniela"), 700d)
                                .Constroi()
                         );

            leilaoDao.Setup(l => l.encerrados()).Returns(leiloes);

            Pagamento pagamentoRetorno = null;

            pagamentoDao.Setup(p => p.Salva(It.IsAny<Pagamento>())).Callback<Pagamento>(r => pagamentoRetorno = r);

            GeradorDePagamento gerador = new GeradorDePagamento(leilaoDao.Object, avaliador, pagamentoDao.Object);

            gerador.Gera();

            Assert.AreEqual(DayOfWeek.Monday, pagamentoRetorno.Data.DayOfWeek);
        }
        public void DeveGerarPagamentoParaLeilaoEncerrado()
        {
            var leilaoDao = new Mock<LeilaoDaoFalso>();
            //var avaliador = new Mock<Avaliador>();
            var avaliador = new Avaliador();
            var pagamentoDao = new Mock<PagamentoDao>();

            CriadorDeLeiloes criador = new CriadorDeLeiloes();

            List<Leilao> leiloes = new List<Leilao>();

            leiloes.Add( criador.Para("Bicicleta Ergometrica", new DateTime(2016, 01, 25))
                                .Lance(new Usuario("Sebastião"), 500d)
                                .Lance(new Usuario("Daniela"), 700d)
                                .Constroi()
                         );

            //aqui estou falando que quando for utilizado oo metodo encerrados 
            //da classe leilaoDao ele não faça o que esta definido em seu códigoo e sim que me retorne a lista de leiloes 
            leilaoDao.Setup(l => l.encerrados()).Returns(leiloes);

            //também estou subescrevendo o retorno do atributo maior lance.
            //avaliador.Setup(a => a.MaiorLance).Returns(700d);

            Pagamento pagamentoRetornoMock = null;

            //Defino que sempre que o método salva for invocado independente do pagamento que está sendo passado como parametro
            //ele me fação um "retorno" do objeto pagamento que está sendo passado como parametro
            //então st uma variável como sendo este pagamento que sera retornado.
            pagamentoDao.Setup(p => p.Salva(It.IsAny<Pagamento>())).Callback<Pagamento>(r => pagamentoRetornoMock = r);

            GeradorDePagamento gerador = new GeradorDePagamento(leilaoDao.Object,avaliador,pagamentoDao.Object);

            gerador.Gera();

            Assert.AreEqual(700d, pagamentoRetornoMock.Valor);

        }