Tag: mockito

Mockito模拟对象从方法内的方法调用中分配一个空值

我有一个课我需要用mockito测试。 以下是课程和Mockito考试。 dbBuilder.parse(file)总是返回null,因为它调用了几个类,而这些类又调用了jar文件中的几个方法。 即使我嘲笑了所有这些,它总是返回null。 我无法跟踪空值的来源。 我试图压制这些方法,但仍无用。 由于此方法调用返回null,因此doc值为null。 因此,doc调用getElementsByTagName方法,并且运行mockito测试失败并显示NullPointerException 。 在我需要测试的此方法中,此代码后面有几行代码。 我该如何解决这个问题? class DocumentClass{ public void docMethod(){ DocumentBuilder dbBuilder = new DocumentBuilder(); Document doc = new Document(); FileStream file = new FileStream(new File(some path)); doc = dbBuilder.parse(file); NodeList nodes = doc.getElementsByTagName(“documents”); } } @RunWith(PowerMockRunner.class) @PrepareForTest({Document.class,DocumentBuilder.class,FileStream.class}) public class TestDocument{ @Test public documentTest(){ DocumentBuilder dbBuilder = PowerMockito.mock(DocumentBuilder.class); Document […]

InjectMocks对象的org.mockito.exceptions.misusing.NotAMockException

我试图模拟一个方法的返回值,但我得到NotAMockException 。 @InjectMocks private MyService myService; @Mock private OtherServiceUsedInMyServiceAsAutowired otherServiceUsedInMyServiceAsAutowired; 在MyService我有一个名为myMethod()的方法,我希望在调用此方法时返回虚拟对象。 doReturn(someDummyObject).when(myService).myMethod(any(), any(), any()); 那时我得到了错误。 我究竟做错了什么? 完整错误: org.mockito.exceptions.misusing.NotAMockException: Argument passed to when() is not a mock! Example of correct stubbing: doThrow(new RuntimeException()).when(mock).someMethod();

unit testing使用资源包的静态方法

我已经阅读了很多关于使用Powermock和Mockito的文章,并尝试了很多不同的方法,但我仍然无法找到unit testing以下静态方法的方法。 public static Map getEntries() { Map myEntriesMap = new TreeMap(); ResourceBundle myEntries = ResourceBundle.getBundle(ENTRIES_BUNDLE); Enumeration enumList = myEntries.getKeys(); String key = null; String value = null; while (enumList.hasMoreElements()) { key = enumList.nextElement().toString(); value = myEntries.getString(key); myEntriesMap.put(key, value); } return myEntriesMap; } 代码是包含大约30个这样的静态方法的(遗留)类的一部分,并且重构实际上不是一个选项。 类似地,在一些其他静态方法中,正在检索DB连接。 例如:如何模拟资源包ENTRIES_BUNDLE并对此方法进行unit testing? 我正在寻找一种可以普遍适用于所有静态方法的模式。

AspectJ的集成测试

我正在尝试为Custom Aspect编写Integratation测试。 这是Aspect Class Snippet。 @Aspect @Component public class SampleAspect { private static Logger log = LoggerFactory.getLogger(SampleAspect.class); private int count; public int getCount(){ return count; } public void setCount(){ this.count= count; } @Around(“execution(* org.springframework.data.mongodb.core.MongoOperations.*(..)) || execution(* org.springframework.web.client.RestOperations.*(..))”) public Object intercept(final ProceedingJoinPoint point) throws Throwable { logger.info(“invoked Cutom aspect”); setCount(1); return point.proceed(); } } 因此,只要关节点与切入点匹配,上述方面就会截获。 它的工作正常。 […]

在程序包上运行时Junit测试失败,但在文件上运行时成功

最新消息:有没有人遇到过这个问题? 我在Maven项目中使用JUnit 4.5和Mockito 1.7。 我在testCaseFolder包中有testCaseA.java。 如果我打开testCaseA.java,右键单击代码,选择“Run as” – “Junit test”即可。 但如果我右键单击包,选择“运行方式” – “Junit测试”,它将失败: org.mockito.exceptions.misusing.InvalidUseOfMatchersException: Misplaced argument matcher detected! Somewhere before this line you probably misused Mockito argument matchers. For example you might have used anyObject() argument matcher outside of verification or stubbing. Here are examples of correct usage of argument matchers: when(mock.get(anyInt())).thenReturn(null); doThrow(new RuntimeException()).when(mock).someVoidMethod(anyObject()); verify(mock).someMethod(contains(“foo”)); […]

如何模拟FileInputStream和其他* Streams

我有一个类,它获取GenericFile作为输入参数读取数据并进行一些额外的处理。 我需要测试它: public class RealCardParser { public static final Logger l = LoggerFactory.getLogger(RealCardParser.class); @Handler public ArrayList handle(GenericFile genericFile) throws IOException { ArrayList strings = new ArrayList(); FileInputStream fstream = new FileInputStream((File) genericFile.getFile()); DataInputStream in = new DataInputStream(fstream); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String strLine = br.readLine();//skip header while ((strLine = br.readLine()) != null) { […]

如何使用Whitebox模拟私有方法(org.powermock.reflect)

我想模拟一个在另一个方法中调用的私有方法。 以下是我写的示例代码。 Java代码: package org.mockprivatemethods; public class AccountDeposit { // Instantiation of AccountDetails using some DI AccountDetails accountDetails; public long deposit(long accountNum, long amountDeposited){ long amount = 0; try{ amount = accountDetails.getAmount(accountNum); updateAccount(accountNum, amountDeposited); amount= amount + amountDeposited; } catch(Exception e){ // log exception } return amount; } private void updateAccount(long accountNum, long amountDeposited) throws […]

NoClassDefFoundError:使用PowerMock-OSGi的org / hamcrest / Matchers

当我运行我的测试作为OSGi PlugIn测试时,我得到org.hamcrest.Matchers的NoClassDefFoundError,但是当我将其作为普通JUnit运行时测试everthing按预期工作。 我正在使用OSMi版本的PowerMock,并在我的启动配置中包含所有必要的依赖项。 我做错了什么? 由于某些原因,似乎Testrunner没有看到这个class级。 编辑:我创建了一个简化的示例项目,并发现问题只出现在我的类声明中使用@PrepareForTest(XXX.class)时。 java.lang.NoClassDefFoundError: org/hamcrest/Matchers at eu.gemtec.commons.util.assertion.Assert.assertParamNotNull(Assert.java:107) at eu.gemtec.eagle.device.aastra.omaxi.core.system.model.impl.MessageHandleFactory.(MessageHandleFactory.java:72) at eu.gemtec.eagle.device.aastra.omaxi.core.system.model.impl.TestMessageHandleFactory.setUp(TestMessageHandleFactory.java:74) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.junit.internal.runners.MethodRoadie.runBefores(MethodRoadie.java:132) at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:95) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:294) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:127) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.access$100(PowerMockJUnit47RunnerDelegateImpl.java:59) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner$LastRuleTestExecutorStatement.evaluate(PowerMockJUnit47RunnerDelegateImpl.java:148) at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:168) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:91) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:282) at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:86) at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:207) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:146) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:120) at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:33) at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:45) […]

使用mockito来存根最终方法

我需要使用一个拥有最终方法的模拟器。 所以我使用powermock但它不起作用 class B { public final int nb() { return 4; } } @RunWith(PowerMockRunner.class) @PrepareForTest(B.class) public class Exemple extends TestCase { @Test public void test() { B b = PowerMockito.mock(B.class); PowerMockito.when(b.nb()).thenReturn(5); final int actualState = b.nb(); assertEquals(5, actualState); } } 如果有人有解决方案,请提前谢谢

Mockito有没有办法从内部类中运行一个间谍对象的存根方法?

我正在使用Mockito为其他人实现的代码编写junit测试。 简化: 有一个外类和一个内部类 Outer类保留Inner类的实例。 Inner类使用Outer类的方法。 简化的代码可能如下所示: public class Outer { private Inner inner; public Outer(){ inner=new Inner(); } public Inner getInner(){ return inner; } public String getOuterName(){ return “outer”; } public String getOuterNiceName(){ return “name=”+getOuterName(); } public class Inner { public String getInnerName(){ return getOuterName()+”-inner”; } } } 我想将Outer类的方法getOuterName()存根,以返回一个方便我测试的值。 要做到这一点,我正在“窥探”对象: Outer outer=new Outer(); Outer spyOuter=spy(outer); […]