标签: mockito

Mockito可以在不考虑参数的情况下存根方法吗?

我正在尝试使用Mockito测试一些遗留代码.

我想FooDao在生产中使用如下的存根:

foo = fooDao.getBar(new Bazoo());
Run Code Online (Sandbox Code Playgroud)

我可以写:

when(fooDao.getBar(new Bazoo())).thenReturn(myFoo);
Run Code Online (Sandbox Code Playgroud)

但显而易见的问题是,getBar()永远不会使用Bazoo我为该方法存根的相同对象调用.(诅咒那个new操作员!)

如果我能以一种myFoo不管参数而返回的方式存根方法,我都会喜欢它.如果做不到这一点,我会听取其他的解决方法建议,但我真的希望避免更改生产代码,直到有合理的测试覆盖率.

java unit-testing mocking mockito

283
推荐指数
4
解决办法
20万
查看次数

将Mockito模拟注入Spring bean

我想将一个Mockito模拟对象注入一个Spring(3+)bean中,以便使用JUnit进行单元测试.我的bean依赖项目前通过@Autowired在私有成员字段上使用注释来注入.

我考虑过使用ReflectionTestUtils.setField但我希望注入的bean实例实际上是一个代理,因此不会声明目标类的私有成员字段.我不希望为依赖创建一个公共setter,因为我将修改我的界面纯粹是为了测试的目的.

我遵循了Spring社区给出的一些建议,但是没有创建模拟并且自动连线失败:

<bean id="dao" class="org.mockito.Mockito" factory-method="mock">
    <constructor-arg value="com.package.Dao" />
</bean>
Run Code Online (Sandbox Code Playgroud)

我目前遇到的错误如下:

...
Caused by: org...NoSuchBeanDefinitionException:
    No matching bean of type [com.package.Dao] found for dependency:
    expected at least 1 bean which qualifies as autowire candidate for this dependency.
    Dependency annotations: {
        @org...Autowired(required=true),
        @org...Qualifier(value=dao)
    }
at org...DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(D...y.java:901)
at org...DefaultListableBeanFactory.doResolveDependency(D...y.java:770)
Run Code Online (Sandbox Code Playgroud)

如果我将constructor-arg值设置为无效,则在启动应用程序上下文时不会发生错误.

junit spring annotations dependency-injection mockito

276
推荐指数
13
解决办法
23万
查看次数

如何使用mockito捕获特定类型的列表

有没有办法使用mockitos ArgumentCaptore捕获特定类型的列表.这不起作用:

ArgumentCaptor<ArrayList<SomeType>> argument = ArgumentCaptor.forClass(ArrayList.class);
Run Code Online (Sandbox Code Playgroud)

java junit unit-testing mockito

275
推荐指数
5
解决办法
12万
查看次数

如何使用mockito verify()调用方法被调用两次

我想通过mockito验证验证方法是否被调用两次或多次.我使用验证,它抱怨像这样:

org.mockito.exceptions.verification.TooManyActualInvocations: 
Wanted 1 time:
But was 2 times. Undesired invocation:
Run Code Online (Sandbox Code Playgroud)

junit verify mockito

275
推荐指数
2
解决办法
28万
查看次数

使用Mockito模拟具有泛型参数的类

是否有一种使用泛型参数模拟类的干净方法?假设我必须模拟一个Foo<T>我需要传递给期望a的方法的类Foo<Bar>.我可以很容易地做到以下几点:

Foo mockFoo = mock(Foo.class);
when(mockFoo.getValue).thenReturn(new Bar());
Run Code Online (Sandbox Code Playgroud)

假设getValue()返回泛型类型T.但是当我稍后将它传递给期望的方法时,那将会有小猫Foo<Bar>.铸造是这样做的唯一方法吗?

java generics mockito

261
推荐指数
8
解决办法
15万
查看次数

使用Mockito多次调用具有相同参数的相同方法

有没有办法让stubbed方法在后续调用中返回不同的对象?我想这样做来测试一个非确定的响应ExecutorCompletionService.即,无论方法的返回顺序如何进行测试,结果都保持不变.

我想要测试的代码看起来像这样.

// Create an completion service so we can group these tasks together
ExecutorCompletionService<T> completionService =
        new ExecutorCompletionService<T>(service);

// Add all these tasks to the completion service
for (Callable<T> t : ts)
    completionService.submit(request);

// As an when each call finished, add it to the response set.
for (int i = 0; i < calls.size(); i ++) {
    try {
        T t = completionService.take().get();
        // do some stuff that I want to test
    } catch (...) { } …
Run Code Online (Sandbox Code Playgroud)

java mocking mockito

254
推荐指数
6
解决办法
20万
查看次数

为什么Mockito没有模拟静态方法?

我在这里读了几个关于静态方法的线程,我想我明白了误用/过度使用静态方法会导致的问题.但我并没有真正了解为什么很难模拟静态方法.

我知道其他嘲笑框架,如PowerMock,可以做到这一点,但为什么不能Mockito?

我读过这篇文章,但作者似乎在虔诚地反对这个词static,也许这是我理解不足的原因.

一个简单的解释/链接将是伟大的.

java methods static mockito

252
推荐指数
5
解决办法
17万
查看次数

使用mockito验证对象属性值

我有一个方法调用,我想用mockito模拟.首先,我创建并注入了一个将在其上调用方法的对象实例.我的目的是验证方法调用中的一个对象.

有没有一种方法可以让mockito在调用mock方法时断言或验证对象及其属性?

Mockito.verify(mockedObject)
       .someMethodOnMockedObject(
              Mockito.<SomeObjectAsArgument>anyObject())
Run Code Online (Sandbox Code Playgroud)

而不是anyObject()我想检查该参数对象包含一些特定的字段

Mockito.verify(mockedObject)
       .someMethodOnMockedObject(
              Mockito.<SomeObjectAsArgument>**compareWithThisObject()**)
Run Code Online (Sandbox Code Playgroud)

java mocking mockito

243
推荐指数
7
解决办法
17万
查看次数

Mockito匹配器和原始数组

使用Mockito,我想在其参数列表中verify()进行方法调用byte[],但我没有找到如何编写它.

 myMethod( byte[] )
Run Code Online (Sandbox Code Playgroud)

我只是想要一些类似的东西anyByteArray(),如何用Mockito做到这一点?

java mockito

217
推荐指数
4
解决办法
12万
查看次数

使用Mockito测试抽象类

我想测试一个抽象类.当然,我可以手动编写一个继承自该类的模拟.

我可以使用模拟框架(我使用的是Mockito)而不是手工制作我的模拟吗?怎么样?

java abstract-class unit-testing mocking mockito

202
推荐指数
8
解决办法
15万
查看次数