jueves, 14 de junio de 2012

Interfaces & Mockito

Poco a poco estoy aprendiendo cómo están programando otras personas.

En el libro Profesisonal ASP.NET Design Patterns -un tocho de más de 1000 páginas, solo me leí los primeros capítulos- explica la importancia de programar con interfaces, de esa manera, el dessarrollo depende del comportamiento y no de la implementación, es menos propenso a errores. Por lo tanto sigue el principio de "fácil extender, difícil de modificar".

He estado jugando con esto de las interfaces, a raíz de este video, además le he añadido Mockito, para hacerlo más divertido. El código es algo muy trivial, de hecho hay un muy buen ejemplo que particularmente me aclaró mucho.

De todas formas voy a poner el pequeño código que he generado.

using System.Drawing;
namespace BrosPaint
{
    public interface IPintable
    {
        Color CurrentColor { get; set; }
        Color ChangeColor(Color newColor);
    }
}
Una pequeña interfaz de pintado.

using System.Drawing;

namespace BrosPaint
{
    public class Vehicle: IPintable
    {
        public Color CurrentColor { get; set; }
        public string Model { get; set; }

        public Color ChangeColor(Color newColor)
        {
            CurrentColor = newColor;
            return newColor;
        }
    }
    public class Truck:Vehicle
    {
    }
}
Implementando una clase genérica, que es vehículo. Luego su clase concreta tractor -Truck-.

namespace BrosPaint
{
    public class Car:Vehicle
    {
    }
}
Jugando un poco con el concepto de herencia, representado en la clase coche -Car-

using System.Drawing;
using NUnit.Framework;
using BrosPaint;

namespace BrosPaint.Test
{
    public class CarTest
    {
        [Test]
        public void PaintCar_Test()
        {
            IPintable item = new Vehicle();
            item.CurrentColor = Color.DimGray;

            item.ChangeColor(Color.DarkViolet);

            Assert.AreEqual(Color.DarkViolet, item.CurrentColor);
        }
    }
}
No puede falta el test ...

namespace BrosPaint
{
    public interface IRepository<t>
    {
         T Get(T element);
    }
}
Un interfaz muy genérica que extrae un elemento de un repositorio, que puede ser una base de datos, un fichero, un servicio web, ...

using NUnit.Framework;
using Moq;
using BrosPaint;

namespace BrosPaint.Test
{
    public class IRepositoryTest
    {
        [Test]
        public void RepositorySimpleTest()
        {
            var mock = new Mock<irepository<car>&gt;();
            var filter = new Car();
            var result = new Car();
            result.Model = "Ferrari";
            mock.Setup(x =&gt; x.Get(It.IsAny<car>())).Returns(result);


            var RepositoryCar = mock.Object;

            Car expectedCar = new Car();
            expectedCar.Model = "Ferrari";
            Car getCar = RepositoryCar.Get(new Car());

            var pp = getCar.Model;
            var ss = expectedCar.Model;

            Assert.IsNotNull(getCar);
            Assert.IsNotNull(expectedCar);
            Assert.IsTrue(expectedCar.Model == getCar.Model);
        }
    }
}
Test, que prueba el repositorio, utilizando mockito -moqueándolo-

No hay comentarios:

Publicar un comentario