Я понимаю, что есть еще один вопрос, который касается именно этой проблемы ( здесь ).Однако в моем случае это не сработает.
У меня есть проект maven (web / frontend), использующий spring.Я добавил jmockit в jvm через pom:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.9</version>
<configuration>
<argLine>-javaagent:${settings.localRepository}/mockit/jmockit/0.998/jmockit-0.998.jar</argLine>
<useSystemClassLoader>true</useSystemClassLoader>
<forkMode>always</forkMode>
</configuration>
</plugin>
SUT (сокращенно) выглядит так:
@Service
@RequestMapping("/bars")
public class BarsController{
[...]
@Autowired
private FooUtils fooUtils;
[...]
@RequestMapping(value = "/get", method = RequestMethod.POST)
public ModelAndView getBars(){
ModelAndView mav = new ModelAndView();
Session session = fooUtils.getSession();
[...]
Теперь мне бы очень хотелосьмакет FooUtils
экземпляр в моем тесте.Следуя совету, данному в в этом вопросе , я попытался:
@RunWith(JMockit.class)
public class BarsControllerTest {
@Autowired BarsController unitUnderTest;
@Mocked Session session;
@Before
public void setUp()
{
FooUtils foo = new MockUp <FooUtils>() {
@Mock
Session getSession() {
return session;
}
}.getMockInstance();
mockit.Deencapsulation.setField(unitUnderTest, foo);
}
Увы, unitUnderTest
, а также foo
оба null
, вызывая это:
java.lang.NullPointerException
at net.manniche.thebars.BarsControllerTest.setUp(BarsControllerTest.java:40)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:172)
at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:78)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:70)
- Что довольно неожиданно, поскольку я ожидаю, что
new MockUp<...>{}.getMockInstance()
вернет некоторый объект.
Я предполагаю, что я 'Я просто упускаю какую-то важную часть, но какую?