255 votes

Utilisation de Mockito pour tester les classes abstraites

J'aimerais tester une classe abstraite. Bien sûr, je peux écrire manuellement un simulateur qui hérite de la classe.

Puis-je le faire en utilisant un framework de mocking (j'utilise Mockito) au lieu de créer manuellement mon mock ? Comment ?

6 votes

A partir de Mockito 1.10.12 Mockito prend en charge l'espionnage/le moquage des classes abstraites directement : SomeAbstract spy = spy(SomeAbstract.class);

15 votes

Depuis la version 2.7.14 de Mockito, vous pouvez également simuler les classes abstraites qui nécessitent des arguments de constructeur par l'intermédiaire de mock(MyAbstractClass.class, withSettings().useConstructor(arg1, arg2).defaultAnswer(CALLS_REAL_METHODS))

1voto

Samuel Points 627

Vous pouvez instancier une classe anonyme, injecter vos mocks et ensuite tester cette classe.

@RunWith(MockitoJUnitRunner.class)
public class ClassUnderTest_Test {

    private ClassUnderTest classUnderTest;

    @Mock
    MyDependencyService myDependencyService;

    @Before
    public void setUp() throws Exception {
        this.classUnderTest = getInstance();
    }

    private ClassUnderTest getInstance() {
        return new ClassUnderTest() {

            private ClassUnderTest init(
                    MyDependencyService myDependencyService
            ) {
                this.myDependencyService = myDependencyService;
                return this;
            }

            @Override
            protected void myMethodToTest() {
                return super.myMethodToTest();
            }
        }.init(myDependencyService);
    }
}

N'oubliez pas que la visibilité doit être protected pour la propriété myDependencyService de la classe abstraite ClassUnderTest .

0voto

Smart Coder Points 41

L'interface de PowerMock Whitebox.invokeMethod(..) peut être utile dans ce cas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X