Я использую следующий метод для проверки обновления объекта профиля в моем проекте.
import org.apache.commons.collections.MapUtils;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.runners.MockitoJUnitRunner;
import org.mockito.stubbing.Answer;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import java.math.BigInteger;
import java.util.*;
import java.util.concurrent.Callable;
@RunWith(MockitoJUnitRunner.class)
@PrepareForTest({TxUtils.class})
public class MonitoringProfileServicesImplTest extends MonitoringProfileServicesImpl {
private MutableDataObject mutableDataObject = Mockito.mock(MutableDataObject.class);
@Mock
private PersistenceContext persistenceContext;
@Mock
PersistenceContextHelper persistenceContextHelper;
@Mock
MonitoringDao monitoringDao;
@InjectMocks
private MonitoringProfileServicesImpl service;
private BigInteger profileId;
private Map attributeNameIdMap;
private Map invAttributeNameIdMap;
ResponseBean responseBean = new ResponseBean();
@Before
public void setUp() {
Mockito.when(persistenceContextHelper.getLocalPersistenceContext()).thenReturn(persistenceContext);
profileId = BigInteger.valueOf(Long.valueOf(1L));
attributeNameIdMap = new HashMap();
invAttributeNameIdMap = new HashMap();
attributeNameIdMap.put("key", BigInteger.valueOf(1111L));
invAttributeNameIdMap = MapUtils.invertMap(attributeNameIdMap);
}
@Test
public void testXXXX() {
MonitoringProfile monitoringProfile = getDummyMonitoringProfileToBeCreated();
TransactionServicePALImpl transactionImpl = Mockito.mock(TransactionServicePALImpl.class);
Mockito.when(transactionImpl.getTM()).thenReturn(new TransactionManagerImplTest());
Mockito.when(mutableDataObject.getId()).thenReturn(BigInteger.valueOf(1000));
Mockito.when(mutableDataObject.getName()).thenReturn("Name");
Mockito.when(persistenceContext.getObjectById(Mockito.any(BigInteger.class))).thenReturn(mutableDataObject);
Mockito.when(monitoringDao.getAttributeIdsForObjectType(Mockito.any(BigInteger.class))).thenReturn(invAttributeNameIdMap);
TxUtils mock = PowerMockito.mock(TxUtils.class);
System.out.println("newresponseBean:::");
PowerMockito.when(mock.doTxRequired(new Callable() {
@Override
public Object call() throws Exception {
return this;
}
})).thenAnswer(new Answer() {
@Override
public ResponseBean answer(InvocationOnMock invocation) throws Throwable {
responseBean.setResultObj(monitoringProfile);
return responseBean;
}
});
ResponseBean newresponseBean = service.updateMonitoringProfile(monitoringProfile, BigInteger.valueOf(1000));
Assert.assertNotNull(newresponseBean);
Assert.assertNotNull(newresponseBean.getResultObj());
Assert.assertNull(newresponseBean.getErrorObj());
}
}
**В режиме выполнения происходит ошибка в следующей строке
PowerMockito.when(mock.doTxRequired(new Callable().....
В режиме отладки он работает нормально.**
Ниже приведен код метода службы;
public ResponseBean updateMonitoringProfile(@RequestBody MonitoringProfile profileToUpdate) {
ResponseBean responseBean = TxUtils.doTxRequired(() -> {
ResponseBean response = new ResponseBean();
try {
PersistenceContext localPersistenceContext = persistenceContextHelper.getLocalPersistenceContext();
MutableDataObject monitoringProfile = localPersistenceContext.getObjectById(profileToUpdate.getId());
ParamsBuilder paramsBuilder = populateProfileParameterValues(profileToUpdate, monitoringProfile).build();
localPersistenceContext.flush();
response.setResultObj(profileToUpdate);
} catch (NotUpdatedException notUpdatedEx) {
notUpdatedEx.printStackTrace();
}
return response;
});
return responseBean;
}
Следующее исключение, которое мы получаем при работе в режиме «Выполнить»;
newresponseBean:::
org.mockito.exceptions.misusing.MissingMethodInvocationException:
when() requires an argument which has to be 'a method call on a mock'.
For example:
when(mock.getArticles()).thenReturn(articles);
Also, this error might show up because:
1. you stub either of: final/private/equals()/hashCode() methods.
Those methods cannot be stubbed/verified.
Mocking methods declared on non-public parent classes is not supported.
2. inside when() you don't call method on mock but on some other object.
at org.powermock.api.mockito.PowerMockito.when(PowerMockito.java:495)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37)
at org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:237)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Process finished with exit code -1
Подробнее здесь: https://stackoverflow.com/questions/417 ... n-run-mode
Тестовый пример JUnit/Mockito передается в режиме отладки, но не в режиме выполнения ⇐ JAVA
Программисты JAVA общаются здесь
1770064152
Anonymous
[b]Я использую следующий метод для проверки обновления объекта профиля в моем проекте.[/b]
import org.apache.commons.collections.MapUtils;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.runners.MockitoJUnitRunner;
import org.mockito.stubbing.Answer;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import java.math.BigInteger;
import java.util.*;
import java.util.concurrent.Callable;
@RunWith(MockitoJUnitRunner.class)
@PrepareForTest({TxUtils.class})
public class MonitoringProfileServicesImplTest extends MonitoringProfileServicesImpl {
private MutableDataObject mutableDataObject = Mockito.mock(MutableDataObject.class);
@Mock
private PersistenceContext persistenceContext;
@Mock
PersistenceContextHelper persistenceContextHelper;
@Mock
MonitoringDao monitoringDao;
@InjectMocks
private MonitoringProfileServicesImpl service;
private BigInteger profileId;
private Map attributeNameIdMap;
private Map invAttributeNameIdMap;
ResponseBean responseBean = new ResponseBean();
@Before
public void setUp() {
Mockito.when(persistenceContextHelper.getLocalPersistenceContext()).thenReturn(persistenceContext);
profileId = BigInteger.valueOf(Long.valueOf(1L));
attributeNameIdMap = new HashMap();
invAttributeNameIdMap = new HashMap();
attributeNameIdMap.put("key", BigInteger.valueOf(1111L));
invAttributeNameIdMap = MapUtils.invertMap(attributeNameIdMap);
}
@Test
public void testXXXX() {
MonitoringProfile monitoringProfile = getDummyMonitoringProfileToBeCreated();
TransactionServicePALImpl transactionImpl = Mockito.mock(TransactionServicePALImpl.class);
Mockito.when(transactionImpl.getTM()).thenReturn(new TransactionManagerImplTest());
Mockito.when(mutableDataObject.getId()).thenReturn(BigInteger.valueOf(1000));
Mockito.when(mutableDataObject.getName()).thenReturn("Name");
Mockito.when(persistenceContext.getObjectById(Mockito.any(BigInteger.class))).thenReturn(mutableDataObject);
Mockito.when(monitoringDao.getAttributeIdsForObjectType(Mockito.any(BigInteger.class))).thenReturn(invAttributeNameIdMap);
TxUtils mock = PowerMockito.mock(TxUtils.class);
System.out.println("newresponseBean:::");
PowerMockito.when(mock.doTxRequired(new Callable() {
@Override
public Object call() throws Exception {
return this;
}
})).thenAnswer(new Answer() {
@Override
public ResponseBean answer(InvocationOnMock invocation) throws Throwable {
responseBean.setResultObj(monitoringProfile);
return responseBean;
}
});
ResponseBean newresponseBean = service.updateMonitoringProfile(monitoringProfile, BigInteger.valueOf(1000));
Assert.assertNotNull(newresponseBean);
Assert.assertNotNull(newresponseBean.getResultObj());
Assert.assertNull(newresponseBean.getErrorObj());
}
}
**В режиме выполнения происходит ошибка в следующей строке
PowerMockito.when(mock.doTxRequired(new Callable().....
В режиме отладки он работает нормально.**
Ниже приведен код метода службы;
public ResponseBean updateMonitoringProfile(@RequestBody MonitoringProfile profileToUpdate) {
ResponseBean responseBean = TxUtils.doTxRequired(() -> {
ResponseBean response = new ResponseBean();
try {
PersistenceContext localPersistenceContext = persistenceContextHelper.getLocalPersistenceContext();
MutableDataObject monitoringProfile = localPersistenceContext.getObjectById(profileToUpdate.getId());
ParamsBuilder paramsBuilder = populateProfileParameterValues(profileToUpdate, monitoringProfile).build();
localPersistenceContext.flush();
response.setResultObj(profileToUpdate);
} catch (NotUpdatedException notUpdatedEx) {
notUpdatedEx.printStackTrace();
}
return response;
});
return responseBean;
}
Следующее исключение, которое мы получаем при работе в режиме «Выполнить»;
newresponseBean:::
org.mockito.exceptions.misusing.MissingMethodInvocationException:
when() requires an argument which has to be 'a method call on a mock'.
For example:
when(mock.getArticles()).thenReturn(articles);
Also, this error might show up because:
1. you stub either of: final/private/equals()/hashCode() methods.
Those methods cannot be stubbed/verified.
Mocking methods declared on non-public parent classes is not supported.
2. inside when() you don't call method on mock but on some other object.
at org.powermock.api.mockito.PowerMockito.when(PowerMockito.java:495)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37)
at org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:237)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Process finished with exit code -1
Подробнее здесь: [url]https://stackoverflow.com/questions/41758110/junit-mockito-test-case-gets-passed-in-debug-mode-but-not-in-run-mode[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия