Ayer, Mario y Ángel me señalaron algunos errores en mi post anterior, en realidad es posible evitar tener que escribir la clase FalsoPostRepositorio.
Aquí les muestro como quedo mi test Crear_post_Test() donde utilizo Callback de moq.
[TestMethod()]
public void Crear_post_Test()
{
Dictionary<long, IPost> posts = new Dictionary<long, IPost>();
var falso_repositorio = new Mock<IPostRepositorio>();
falso_repositorio
.Setup(x => x.Agregar(It.IsAny<IPost>()))
.Callback((IPost p) => posts.Add(p.Id, p));
IPostServicio servicioPost = new PostServicio(falso_repositorio.Object);
IPost post = new Post();
post.Id = 1;
post.Title = "Prueba";
servicioPost.Crear(post);
Assert.AreEqual(posts.Count, 1);
Assert.AreEqual(posts[1], post);
}
y el test que prueba la actualización seria el siguiente:
[TestMethod()]
public void Actualizar_post()
{
Dictionary<long, IPost> posts = new Dictionary<long, IPost>();
IPost post = new Post();
post.Id = 1;
post.Title = "Prueba";
posts.Add(1, post);
var falso_repositorio = new Mock<IPostRepositorio>();
falso_repositorio
.Setup(x => x.Actualizar(IsAny<IPost>()))
.Callback<IPost>((p) => posts.ActualizarPost(p));
IPostServicio servicioPost = new PostServicio(falso_repositorio.Object);
post = new Post();
post.Id = 1;
post.Title = "Prueba actualizada";
servicioPost.Actualizar(post);
Assert.AreEqual(posts[1].Title, "Prueba actualizada");
}
ActualizarPost() es un método de extensión.