J'ai le test d'unité d'échantillonnage suivant qui tente de simuler java.nio.file.files, mais cette simulation ne fonctionne pas et le code tente de supprimer le chemin d'échantillon.
[...] if (e == null) { Files.delete(dir); return FileVisitResult.CONTINUE; } [...]
3 Réponses :
Avez-vous ajouté
import java.io.IOException; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.SimpleFileVisitor; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @RunWith(PowerMockRunner.class) @PrepareForTest(Files.class) public class TestVisitor { public class PrintingVisitor extends SimpleFileVisitor<Path> { @Override public FileVisitResult postVisitDirectory(final Path dir, final IOException exc) throws IOException { Files.delete(dir); return FileVisitResult.CONTINUE; } } @Test public void testPostVisitDirectory() throws Exception { final Path mockedPath = Paths.get("sample path"); /* Mocking */ PowerMockito.mockStatic(Files.class); PowerMockito.doNothing().when(Files.class, PowerMockito.method(Files.class, "delete", Path.class)); /* End Mocking */ final PrintingVisitor visitor = new PrintingVisitor(); Assert.assertEquals("The was a problem visiting the file", FileVisitResult.CONTINUE, visitor.postVisitDirectory(mockedPath, null)); } }
Oui c'est présent. Dans la même classe, j'ai en fait avoir un talon PowerMockito.stub (Powermockito.Method (Files.class, "DeleteIfexists", path.class)) .Toreturn (vrai); code> qui fonctionne
Mais puisque la suppression renvoie, je ne peux pas utiliser la même technique :(
Mon problème pourrait être plus compliqué que moi. J'ai couru avec succès votre extrait dans une classe séparée, mais cela ne fonctionne pas dans ma classe actuelle. Peut se moquer des choses en désordre au niveau de la classe d'essai?
Je ne suis pas sûr de ce que tu veux dire. La moqueur ne doit pas affecter la manière dont la classe de test (en supposant que ceci est celle contenant les fonctions @Test code> méthodes), bien que le
@Runwith code> fait évidemment.
Il semble que le @preparefortest ne se comporte pas correctement, il y a des personnes qui ont des problèmes similaires groups.google.com/forum/?fromgroups = #! Sujet / Powermock / ...
Dans votre extrait si vous supprimez PowerMockito.Donothing (). Le test passe toujours à cause du moquystique de sorte que je devine que la méthode moquystique échoue
Le comportement par défaut de mocktstatic () code> est de faire des méthodes de vide ne rien faire. C'est probablement une bonne forme pour inclure explicitement le
donothing () code> cependant, pour préciser ce que vous avez l'intention d'arriver à quelles méthodes particulières.
Le lien semble utiliser PowerMock avec EasyMock. Je me demande comment applicable c'est? Avez-vous vérifié toutes vos importations pour vous assurer que c'est la même classe code> Classe de votre visiteur et de votre cas de test?
J'ai eu un problème similaire et il s'avère qu'il était lié à la préparation des bonnes classes. P>
Dans l'exemple ci-dessus, la classe testée était déjà dans la «PRÉPARACE PLADRE», car il s'agissait d'une classe interne de la classe de test. P>
Vous devez ajouter les classes à J'ai nommé la classe anonyme et l'a ajouté à @preparfortest code> qui appelez les méthodes statiques ... et dans mon cas, ils n'étaient pas suffisants car le code qui a accédé à des fichiers
(code> code> était à l'intérieur d'une classe anonyme qui ne peut pas être explicitement préparée. p>
@preparfortest code> et tout a fonctionné p>
J'ai essayé d'ajouter la classe à @preparfortest, puis de courir dans une erreur de pileMap, en raison d'un bogue dans le dernier Javassist: questions.jboss.org/browse/jassist-205 :-(. Rendu à nouveau sur la moqueur de la classe de fichiers mais merci pour la pointe!
J'ai eu un problème similaire à l'aide de PowerMock 1.5.1 et de la classe de fichiers et suspecte qu'il a un problème statique moqueur de certaines classes JDK1.7, bien que je ne sache pas pourquoi. J'ai également vérifié la version javassiste et au moment où il était le plus récent (3.18.0-GA),
J'ai dépouillé ma classe sous test de la ligne de fichiers et elle n'a toujours pas fonctionné. J'ai ensuite décidé d'essayer de se moquer d'une autre classe statique, stringutils.chop ("string"); (Commons-Lang3), puis mon test PowerMock a fonctionné et j'ai pu forcer à générer une exception de simulacre. P>
Cela m'a prouvé que j'avais tout fait par le livre et que je me suis moqueur statique. 'T Travailler sur les classes de fichiers mais il a fait sur Stringutils. p>
Ainsi, j'ai changé, les appels @preparesportest et les appels PowerMockito.MockStatic () pour référencer la classe correcte. P>
à la fin, j'ai abandonné des fichiers moqueurs. Juste une tête en tête au cas où quelqu'un d'autre a le même problème. P>
Je peux systématiquement se moquer de la moqueur de exemple: p> et le test ci-dessous: p> fichiers code> pour fonctionner en ajoutant la classe sous test sur
@preparfortest code> ainsi que des fichiers code> Même si la classe que vous testez n'expose pas statique méthodes. Je n'avais pas eu besoin de faire cela avant pour d'autres moqueurs statiques. Je ne sais pas pourquoi il est nécessaire ou fonctionne différemment pour
fichiers code>. P>
Bravo pour cela. Je devais ajouter le "MyTestClass.class" à @preparefortest aussi pour obtenir des fichiers et des chemins se moque de travailler
Lorsque vous appliquez @preparfortest code> à une classe, il gâche la couverture Jacoco bien sûr. Parce que les deux instrument la classe.
J'utilise d'essayer de se moquer de la classe de fichiers (fichiers, obtenir ()). Mais la moqueur ne fonctionne pas et je reçois une exception Nullpointer. Une idée de ce que pourrait être le problème?
BTW Je reçois une nosuchfileException.