2010-09-14 14 views

Respuesta

0

me las arreglé para llegar a una solución:

expectLastCall().andAnswer(new IAnswer() { 
    public Object answer() { 
     Assert.assertFail(); 
     return null; 
    } 
}); 
+0

Para mí no funciona. Dice "esperado: 1, real: 0". – Vic

+1

Estoy de acuerdo en que esto no funciona. La respuesta correcta es de David Nguyen. – dhaag23

1

Me parece un error. La clase interna Range no permite establecer un máximo inferior a 1.

¿No podría burlarse de ese método y simplemente llamar al Assert.fail()?

+0

sí, lo hice de esa manera eventualmente, ver mi respuesta – nkr1pt

1

Si espera que su método no se llamará a continuación, simplemente no grabarlo. Pero estoy de acuerdo en que no funcionará con un buen simulacro.

8

con EasyMock 3.0, es necesario agregar un .anyTimes() en el expectLastCall o la prueba fallará:

Expectation failure on verify: myMethod(): expected: 1, actual: 0` 

basado en el ejemplo nkr1pt:

expectLastCall().andAnswer(new IAnswer() { 
    public Object answer() { 
     Assert.assertFail(); 
     return null; 
    } 
}).anyTimes(); 
+3

Creo que: Assert.assertFail(); debería ser: Assert.fail(); – Matt

+1

Si bien esta es una respuesta que funciona, me gusta más la de David Wallace ya que es menos detallada. – qben

7

El hecho de que algún método no se llama está controlado por Mock o StrictMock. Lanzarán una excepción cuando se llame a ese método no registrado. Este problema ocurre solo cuando se usa NiceMock s, donde se devuelven los valores predeterminados al llamar para métodos no grabados.

Así que una solución puede ser para no usar NiceMock s.

+2

Estoy totalmente en desacuerdo con la conclusión. Quizás, en este caso, el buen simulacro no es la mejor opción. Pero si quiere asegurarse de que no se llamará a un método, de hecho, esto es lo único que quiere probar, es mejor enfatizar esto con un método burlado que falla con un mensaje apropiado. – qben

+1

Es un buen argumento. Quería señalar este, ya que había tropezado con por qué no puedo especificar 'times (0)'. Y solo después me di cuenta de que ese tipo de contradicción con la idea de una buena burla, y no una buena burla, no permite que se ejecuten métodos no registrados. Lanzar una excepción afirmar como la respuesta parecía más como una solución para mí y que 0 las llamadas al método se deben especificar utilizando burlas no agradables. Tal vez soy un poco asertivo en la conclusión. Solo lo corregiré. – Vic

16

Puede usar .andThrow(new AssertionFailedError()).anyTimes(); - esta es la misma excepción que Assert.fail(), pero es menos detallada que hacer un Answer.

+2

Quizás agregar una buena descripción sobre por qué falló la prueba mejora aún más esta solución (que es la mejor de todas aquí). – qben

Cuestiones relacionadas