Sintaxis en Rhino Mocks
Rhino Mocks es un excelente framework para realizar mocking en nuestras pruebas unitarias. Una de las buenas razones para usarlo es que no hace uso de strings para hardcodear los nombres de tipos, metodos, properties, etc, reduciendo entonces la posibilidad de error en tiempo de ejecución.
Despues de la versión 3.0.5 liberada hace un tiempo, la sintaxis para realizar mocking quedó un poco más fácil de leer y con menos posibilidades de error.
Al mirar este screencastintroductorio a Rhino Mocks te darás cuenta como se hacía antes. También salta a la vista que cualquiera puede olvidar de llamar al método VerifyCall() dejando libre la posibilidad de errores.
[Test]
public void SigmoidalFunctionDerivative()
{
INet net = Mock<INet>();
ITransferFunction tf = new SigmoidalTransferFuncion();
Expect
.Call(net.Value)
.Return(5.0);
Mocks.ReplayAll();
//f'(net) = y * ( 1 - y )
Assert.Equal(0.006648057, Math.Round(tf.Derivate(net), 9));
Mocks.VerifyAll();
}
Una forma más clara de hacerlo es:
[Test]
public void SigmoidalFunctionDerivative()
{
INet net = Mock<INet>();
ITransferFunction tf = new SigmoidalTransferFuncion();
using (Mocks.Record())
{
Expect
.Call(net.Value)
.Return(5.0);
}
using (Mocks.Playback())
{
//f'(net) = y * ( 1 - y )
Assert.Equal(0.006648057, Math.Round(tf.Derivate(net), 9));
}
}
En estos ejemplos estoy usando un helper para el metodo Mock<T>() y la property MockRepository Mocks {get; set; }. Nada de otro mundo, y se pueda mejorar:
public class TestFixtureBase { private MockRepository mocks; public MockRepository Mocks { get { if (mocks == null) { mocks = new MockRepository(); } return mocks; } } public T Mock<T>() { return Mocks.CreateMock<T>(); } }
Existe aún así otra manera de hacer lo mismo, en vez de using, hacemos uso de delegados y la clase With (no es el de VB pero creo que por ahí vino la idea):
[Test]
public void SigmoidalFunctionDerivative()
{
INet net = Mock<INet>();
ITransferFunction tf = new SigmoidalTransferFuncion();
With
.Mocks(Mocks)
.Expecting(delegate
{
Expect
.Call(net.Value)
.Return(5.0);
})
.Verify(delegate
{
//f'(net) = y * ( 1 - y )
Assert.Equal(0.006648057,
Math.Round(tf.Derivate(net), 9));
});
}
Particulamente elijo la opción 2, el usar la sintaxis con using.
One Response to Sintaxis en Rhino Mocks
Leave a Reply Cancel reply
-
Categories
- .NET
- ActiveRecord
- agil
- Alt.Net
- AOP
- Asp.net MVC
- blog
- C#
- codegeneration
- cosas interesantes
- db4o
- db4o-analyzer
- DLR
- enterprise-library
- expresiones regulares
- General
- Hibernate
- IoC
- it
- Java
- LINQ
- Linux
- Lucene
- Mocking
- Mono
- monosms
- MVC
- NAnt
- NHibernate
- NHibernate.Burrow
- NHibernate.Contrib
- NHibernate.Validator
- noticias
- O/R Mapping
- Open Source
- patrones
- personal
- podcast
- programación
- Redes Neuronales
- Refactoring
- regex
- Scrum
- Security
- Shards
- Sin Categoría
- Spring
- SqlServer
- Testing
- tips
- Tool
- tutorial
- Ubuntu
- uNHAddIns
- video
- Virtualización
- Visual Basic.Net
- Visual Studio
- VMWare
- Web
-
Articles
- June 2011
- May 2011
- November 2009
- October 2009
- April 2009
- March 2009
- February 2009
- October 2008
- September 2008
- August 2008
- July 2008
- June 2008
- May 2008
- April 2008
- March 2008
- February 2008
- January 2008
- December 2007
- November 2007
- October 2007
- September 2007
- August 2007
- June 2007
- May 2007
- April 2007
- March 2007
- February 2007
- January 2007
- December 2006
- November 2006
- October 2006
- September 2006
- August 2006
- March 2006
- February 2006
- December 2005
- November 2005
- October 2005
-
Meta





Ufff ya empezaste a hablar raro como Oren