J'ai le code simple suivant. J'ai une classe (TestClass) et je veux tester "someMethod". Il existe une méthode statique externe appelée par mon "méthode". Je veux Powermock cette méthode statique pour me retourner un objet factice . J'ai le @PrepareForTest (ExternalClass.class) au début, mais quand je l'exécute, il donne l'erreur:
La classe ExternalClass non préparée pour le test . Pour préparer cette classe, ajoutez une classe à l'annotation '@PrepareForTest'
. Si vous n'utilisez pas cette annotation, ajoutez-la au niveau classe ou méthode.
S'il vous plaît, aidez-moi à indiquer ce qui ne va pas avec la façon dont j'ai utilisé @PrepareForTest
@RunWith(PowerMockRunner.class)
@PrepareForTest(ExternalClass.class)
public class xyzTest {
@Mock
private RestTemplate restTemplate;
@Mock
private TestClass testClass;
@BeforeClass
private void setUpBeforeClass() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testSuccessCase() {
Boolean mockResponse = true;
ResponseEntity<Boolean> response = new ResponseEntity<Boolean>(mockResponse, HttpStatus.OK);
SomeClass someClass = new SomeClass("test", "1.0.0", "someUrl", "someMetaData");
PowerMockito.mockStatic(ExternalClass.class);
Mockito.when(restTemplate.postForEntity(any(String.class), any(String.class), eq(Boolean.class))).thenReturn(response);
Mockito.when(ExternalClass.getSomeClass(any(String.class))).thenReturn(someClass);
Boolean result = testClass.someMethod("test");
Assert.isTrue(result);
Mockito.verify(restTemplate, times(1)).postForObject(any(String.class), any(String.class), any());
}
}
Assurez-vous d’ajouter @RunWith(PowerMockRunner.class)
au sommet de votre classe.
J'ai eu la même erreur, résolu en ajoutant
@Rule
public PowerMockRule rule = new PowerMockRule();
à l'intérieur de la classe de test.
Comme pour la dernière réponse, mon problème consistait également à mélanger l'annotation Test de TestNG au lieu de Junit Test.
import org.junit.Test; // works
import org.testng.annotations.Test // did not work
Erreur très abstruse et j'ai passé plus de 5 heures à déboguer :(
Pour ceux qui essaient de faire fonctionner cela avec Junit 5, si vous utilisez la version bêta de powermock-module-junit4
qui est compatible avec 4+, la bibliothèque ne reconnaîtra toujours pas
import org.junit.jupiter.api.Test;
et il jettera un:
org.powermock.api.mockito.ClassNotPreparedException
lorsque @PrepareForTest
est appliqué à la classe que vous voulez simuler statique. Si vous souhaitez utiliser PowerMock, vous devrez revenir à Junit 4 ou créer un MockWrapper pour votre méthode statique à ce stade.
PowerMock 2.0: Github Roadmap
J'ai eu la même erreur mais l'ai résolue. Mon problème était que j'avais inclus powermock-module-junit4
mais inclus mon annotation test de TestNG au lieu de Junit.
Si les réponses ci-dessus ne fonctionnent pas, essayez extends PowerMockTestCase
. Cette astuce a fonctionné pour moi.
Exemple: public class xyzTest extends PowerMockTestCase
J'ai eu la même erreur. J'utilisais TestNG pour exécuter les tests. J'ai dû utiliser la méthode suivante pour résoudre le problème ci-dessus.
@ObjectFactory
public IObjectFactory getObjectFactory() {
return new PowerMockObjectFactory();
}