Tag: mockito

TestNG + Mockito + PowerMock – verifyStatic()不起作用

我是新的TestNG和一般的unit testing。 我使用的是TestNG 6.9.6和Mockito 1.10.19以及PowerMock 1.6.4。 我想validationMyService类中的myMethod()方法是否在内部使用正确的参数调用静态方法Util.myStaticMethod 。 由于Mockito本身不支持静态方法的validation,因此我使用PowerMock。 我的测试类如下所示: public class MyTest { private MyService myService; @Captor ArgumentCaptor argCaptor; @BeforeMethod public void setup() { MockitoAnnotations.initMocks( this ); myService = new MyService(); } @Test @PrepareForTest(MyService.class) public void myTest() { PowerMockito.mockStatic(Util.class); myService.myMethod(“arg”); PowerMockito.verifyStatic(10); Util.myStaticMethod(anyString()); } } 由于myMethod调用静态方法Util.myStaticMethod()一次,因此预计此测试将失败。 但是当我运行测试时,它总是通过,无论我传递给PowerMockito.verifyStatic()值是什么。 另外,如果我在这个类中编写另一个测试方法然后运行测试,我会收到以下错误 org.mockito.exceptions.misusing.UnfinishedVerificationException: Missing method call for verify(mock) here: […]

Mockito mock在尝试存根包保护方法时调用实际方法实现

我正在尝试使用Mockito 1.8.5存根方法,但这样做会调用真正的方法实现(使用“”作为parm值)会引发exception。 package background.internal; //located in trunk/tests/java/background/internal public class MoveStepTest { @Test public void testMoveUpdate() { final String returnValue = “value”; final FileAttachmentContainer file = mock(FileAttachmentContainer.class); doReturn(returnValue).when(file).moveAttachment(anyString(), anyString(), anyString()); //this also fails //when(file.moveAttachment(anyString(), anyString(), anyString())).thenReturn(returnValue); final AttachmentMoveStep move = new AttachmentMoveStep(file); final Action moveResult = move.advance(1, mock(Context.class)); assertEquals(Action.done, moveResult); } } 我试图模拟的方法看起来像这样。 没有最终的方法或类。 package background.internal; […]

被测单元:Impl还是接口?

假设我有实现它的接口和实现类,我想为此编写unit testing。 我应该测试什么接口或Impl? 这是一个例子: public interface HelloInterface { public void sayHello(); } public class HelloInterfaceImpl implements HelloInterface { private PrintStream target = System.out; @Override public void sayHello() { target.print(“Hello World”); } public void setTarget(PrintStream target){ this.target = target; } } 所以,我有HelloInterface和HelloInterfaceImpl来实现它。 什么是被测单元接口或Impl? 我认为它应该是HelloInterface。 考虑下面的JUnit测试草图: public class HelloInterfaceTest { private HelloInterface hi; @Before public void setUp() […]

powermock mocking构造函数通过whennew()不能与匿名类一起使用

我有一个DummyResource类和一个DummyTarget文件,以及一个测试类TestDummyResource,如下所示,但DummyResource dr = mock(DummyResource.class)对象DummyResource dr = mock(DummyResource.class)仅在我在一个普通类中调用构造函数时才有效,当它在一个匿名类中调用时,它调用的是实际的构造函数,而不是使用模拟对象。 版本: powermock 1.4.12 mockito 1.9.0 junit 4.8.2 DummyTarget.java: import java.io.IOException; import java.io.OutputStream; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.StreamingOutput; public class DummyTarget { public StreamingOutput testMocking() { return new StreamingOutput() { @Override public void write(OutputStream arg0) throws IOException, WebApplicationException { new DummyResource(); } }; } } DummyResource.java: package com.smin.dummy; public class […]

如何validation是否未抛出exception

在我使用Mockito的unit testing中,我想validation是否没有抛出NullPointerException 。 public void testNPENotThrown{ Calling calling= Mock(Calling.class); testClass.setInner(calling); testClass.setThrow(true); testClass.testMethod(); verify(calling, never()).method(); } 我的测试设置了testClass ,设置了Calling对象和属性,以便该方法抛出NullPointerException 。 我validation从不调用Calling.method()。 public void testMethod(){ if(throw) { throw new NullPointerException(); } calling.method(); } 我想要一个失败的测试,因为它抛出一个NullPointerException ,然后我想写一些代码来解决这个问题。 我注意到的是测试总是通过,因为exception永远不会被测试方法抛出。

Mockito对象不是声明类的实例

我有一段时间没有触及Mockito,我从未广泛使用它。 但是今天在一些新代码中我想使用最佳实践,所以我使用以下Java版本提取了mockito-core 2.0.54-beta: java version “1.8.0” Java(TM) SE Runtime Environment (build 1.8.0-b132) Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode) 我需要一个这个接口的实例来测试: https://bitbucket.org/globalmentor/rincl/src/bf0e8875a1bae16247dd904e0b8bc067c9f8abc9/src/main/java/io/rincl/ResourceI18nConcern.java public interface ResourceI18nConcern extends Concern { public Locale getLocale(@Nonnull Locale.Category category); public void setLocale(@Nonnull Locale.Category category, @Nonnull Locale locale); public default void setLocale(@Nonnull Locale locale) {…} public Resources getResources(@Nonnull final Class contextClass) […]

Mockito Spy’ing对被unit testing的物体

窥探正在进行unit testing的物体是否有代码气味? 例如,假设我有一个LineCounter类,其作用是简单地计算字符串中的行数。 – class LineCounter { public int getNumLines(String string) { String metadata = getStringMetadata(string); // count lines in file return numLines; } /** Expensive operation */ protected String getStringMetadata(String string) { // do stuff with string } } 现在我想为此编写一个JUnit 4测试来测试getNumLines方法,同时getNumLines昂贵的getStringMetadata调用。 我决定使用Mockito的间谍机制让getStringMetadata返回一个虚拟值。 class LineCounterTests { @Test public void testGetNumLines() { LineCounter lineCounterSpy = Mockito.spy(new […]

带有generics的mock方法,并以返回类型扩展

是否可以使用签名Set getCars()来模拟(使用mockito)方法Set getCars() Set getCars()而没有Set getCars()警告? 我试过了: XXX cars = xxx; when(owner.getCars()).thenReturn(cars); 但无论我如何宣布cars我总是得到编译错误。 例如,当我宣布这样的时候 Set cars = xxx 我得到标准的通用/ mockito编译错误 The method thenReturn(Set) in the type OngoingStubbing<Set> is not applicable for the arguments (Set)

如何在tycho中引用mockito?

我目前正试图通过tycho完成我的构建(~30个捆绑)。 在我的unit testing中使用Mockito时遇到了一些令人困惑的问题。 我创建了一个eclipse-test-plugin作为测试包的片段项目。 由于tycho应该使用清单解析所需的bundle,我从pom.xml删除了对mockito的依赖。 然后,当我尝试将mockito添加到清单中的必需包时,mockito未列出。 我找到了这篇文章并创建了一个指向eclipse indigo的目标平台。 我包含了平台细节,所以我不需要eclipse delta包。 然后发生了第一件奇怪的事情。 Eclipse告诉我有一些不可靠的依赖关系,当我在eclipse中将新创建的目标平台设置为活动时,不再有像org.osgi.framework等的包可以通过eclipse解决。 但是当我使用tycho和目标平台构建一个eclipse-product ,它正在运行。 如果我将当前的eclipse安装设置为活动平台,则会解析捆绑包。 我选择了以下的indigo版本: Eclipse RCP插件开发人员资源 Equinox目标组件 Jetty目标组件 所以我的第一个问题是“我的目​​标平台出了什么问题,以便tycho能够使用它而不是eclipse?” 为了更接近我原来的问题(让mockito运行)我将当前的eclipse安装设置为活动目标平台。 Eclipse然后可以解析org.osgi.framework包和其他包。 然后我将之前删除的依赖关系再次添加到了我的pom.xml就像上面提到的那样。 但是当我尝试将它添加到清单中的必需包时,我仍然找不到mockito。 所以我的第二个问题是“我做错了什么?你如何引用未在eclipse更新站点发布的包,例如maven中央存储库?” 更新:在我的研究期间,我发现了两种方法, 即在我的目标平台中包含来自非p2-update-sites的 bundle: Nexus Pro Nexus的专业版支持p2-Proxy存储库,它可以将Maven Central存储库等默认maven存储库包装到p2更新站点,但专业版本每年的成本约为800美元。 创建一个eclipse-repository 您可以使用打包 eclipse-repository 创建一个新的maven项目, 包括所有您想要的包。 然后将创建的工件部署到公共Web服务器。 在您的目标平台中,您可以参考Nexus p2-proxy仓库或Web托管的p2-repo。 有没有人知道其他方式 – 可能更方便/更便宜? 请帮助我理解混乱的tycho世界…… 提前致谢

为什么不是PowerMock

我正在开发一个项目,我们目前正在使用JUnit和Mockito进行测试。 现在我试图找出将PowerMock添加到混音中的副作用。 它的缺点是什么,我应该知道的任何依赖关系,任何稳定性问题? 我看到它支持Java 8.那里有什么问题吗? 从我所读到的,获得Java 7支持是一条漫长的道路。 编辑:我想一个可以总结的问题是: 不使用PowerMock的原因是什么?