В настоящее время я выполняю небольшой проект в качестве упражнения для курса тестирования Java, и мы пытались понять, как работает издевательство.
Цель состояла в том, чтобы увидеть, что мы можем игнорировать ошибки в класс, над которым мы издеваемся.
Вот три класса, используемые для этого упражнения:
Collaborateur:
package fr.orsys.tp2junit.prestation;
public class Collaborateur {
public Collaborateur() {
}
public String transformString(String input){
//Methode avec des bugs
System.out.println("ok")
return "ok";
}
}
Prestation:
package fr.orsys.tp2junit.prestation;
public class Prestation {
private Collaborateur collaborateur;
public Prestation(Collaborateur collaborateur){
this.collaborateur = collaborateur;
}
public String performService(String input){
return collaborateur.transformString(input);
}
}
И, наконец, наш тестовый класс - TestPrestation:
package tp2junit;
import fr.orsys.tp2junit.prestation.Collaborateur;
import fr.orsys.tp2junit.prestation.Prestation;
import org.junit.*;
import static org.junit.Assert.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class TestPrestation {
private Prestation prestation;
private Collaborateur collaborateur;
@Before
public void beforeEachTest(){
collaborateur = mock(Collaborateur.class);
prestation = new Prestation(collaborateur);
}
@Test
public void testPerformService(){
when(collaborateur.transformString("Input")).thenReturn("Ok");
assertEquals("Ok", prestation.performService("Input"));
}
}
Как вы можете видеть в Collaborateur, отсутствует ';' после System.out и целью упражнения было показать, что издевательство над классом позволит нам игнорировать эту ошибку. Некоторые из моих коллег, которые работают с Eclipse, не сталкивались с проблемой при использовании функции «Запуск от имени JUnit».
В Intellij, однако я не нашел такой опции, я попытался изменить конфигурацию для опции «Перед запуском» из «Построить» в «Построить без проверок ошибок», как предлагали некоторые посты StackOverflow, но при этом я получаю следующую ошибку:
java.lang.NoClassDefFoundError: Lfr/orsys/tp2junit/prestation/Collaborateur;
at java.lang.Class.getDeclaredFields0(Native Method)
at java.lang.Class.privateGetDeclaredFields(Class.java:2583)
at java.lang.Class.getDeclaredFields(Class.java:1916)
at org.junit.runners.model.TestClass.getSortedDeclaredFields(TestClass.java:77)
at org.junit.runners.model.TestClass.scanAnnotatedMembers(TestClass.java:70)
at org.junit.runners.model.TestClass.<init>(TestClass.java:57)
at org.junit.runners.ParentRunner.createTestClass(ParentRunner.java:88)
at org.junit.runners.ParentRunner.<init>(ParentRunner.java:83)
at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:65)
at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:10)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:49)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)
Caused by: java.lang.ClassNotFoundException: fr.orsys.tp2junit.prestation.Collaborateur
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 18 more
Если у кого-либо есть какие-либо идеи относительно как решить эту проблему, которая была бы действительно опрятной, в противном случае, я думаю, мне просто нужно будет переключиться на использование Eclipse, что немного обидно, потому что мне действительно нравится Intellij.