2010-01-05 15 views
8

Estoy usando rhino mocks 3.5 y estoy tratando de lanzar una excepción en mi expectativa de probar algunas funcionalidades en mi catch block.Cómo arrojar excepciones en nuevos rinocerontes 3.5

Pero por alguna razón no está lanzando la excepción.

_xyz.stub(x => x.function(string)).throw(new exception("test string")); 

lo tanto, estoy apagando la llamada a la función de lanzar una excepción, pero no es tirar la excepción.

Respuesta

12

No estoy seguro de por qué no funciona para usted. Creé una pequeña muestra y funciona muy bien para mí. Eche un vistazo a este código:

Primero creé el código que deseo probar.

public interface IXyz 
{ 
    void Foo(); 
} 

public class Xyz : IXyz 
{ 
    public void Foo() 
    { 
    } 
} 

public class Sut 
{ 
    public void Bar(IXyz xyz) 
    { 
     xyz.Foo(); 
    } 
} 

Siguiente Voy a crear un método de prueba. En este caso, estoy usando MbUnit, pero debería funcionar con cualquier marco de prueba de unidades.

[Test] 
    [ExpectedException(typeof(ArgumentException), Message = "test string")] 
    public void BarFoo_Exception() 
    { 
     IXyz xyzStub = MockRepository.GenerateStub<IXyz>(); 
     xyzStub.Stub(x => x.Foo()).Throw(new ArgumentException("test string")); 
     new Sut().Bar(xyzStub); 
    } 

Espero que esto ayude.

+0

puede ser que olvidé agregar la línea {ExpectedException en la parte superior de la prueba]. – alice7

2

Es posible que deba publicar más información y más de su código fuente. Mi primera suposición es que el método que está recortando nunca se golpea en el consumidor.

Al recorrer el código, ¿recibe el golpe el lugar donde se utiliza _xyz.function (cadena)?

+0

Sí, se golpea. Pero de alguna manera no devuelve una excepción. – alice7

8

Parece que si el método que desea arrojar una excepción tiene parámetros, entonces necesita agregar .IgnoreArguments() antes del .Throw(new Exception()).

Por ejemplo, he encontrado que lo siguiente no tiraría la excepción:

queue.Stub(x => x.Send(messageQueueTransaction, auditEvent)).Throw(new Exception()); 

Pero lo siguiente sería:

queue.Stub(x => x.Send(messageQueueTransaction, auditEvent)).IgnoreArguments().Throw(new Exception()); 

Debido método excepción de lanzamiento de Vadim era sin parámetros, se trabajó sin ignorar argumentos.

1

La solución para mí fue como la siguiente:

_xyz.Stub(x => x.Function(null)).IgnoreArguments().Throw(new Exception("test string")); 

Nota .IgnoreArguments() la llamada.

Cuestiones relacionadas