标签: mockito

何时使用Mockito.verify()?

我编写jUnit测试用例有3个目的:

  1. 在所有(或大多数)输入组合/值下,确保我的代码满足所有必需的功能.
  2. 为了确保我可以更改实现,并依赖JUnit测试用例告诉我所有功能仍然满足.
  3. 作为我的代码处理的所有用例的文档,并作为重构规范 - 如果代码需要重写.(重构代码,如果我的jUnit测试失败 - 你可能错过了一些用例).

我不明白为什么或何时Mockito.verify()应该使用.当我看到verify()被叫时,它告诉我我的jUnit正在意识到实现.(因此,即使我的功能未受影响,更改我的实现也会破坏我的jUnits).

我在找:

  1. 适当使用的准则应该是什么Mockito.verify()

  2. 从根本上说,jUnits是否能够了解或紧密耦合到被测试类的实现?

java junit unit-testing mockito

192
推荐指数
4
解决办法
5万
查看次数

的Mockito.验证方法参数

我用Google搜索了这个,但没有发现任何相关内容.我有这样的事情:

Object obj = getObject();
Mockeable mock= Mockito.mock(Mockeable.class);
Mockito.when(mock.mymethod(obj )).thenReturn(null);

Testeable testableObj = new Testeable();
testableObj.setMockeable(mock);
command.runtestmethod();
Run Code Online (Sandbox Code Playgroud)

现在,我想验证,mymethod(Object o)内部调用runtestmethod(),是用Object调用的o,而不是其他任何调用.但是我总是通过测试,无论我在验证上做什么,例如:

Mockito.verify(mock.mymethod(Mockito.eq(obj)));
Run Code Online (Sandbox Code Playgroud)

要么

Mockito.verify(mock.mymethod(Mockito.eq(null)));
Run Code Online (Sandbox Code Playgroud)

要么

Mockito.verify(mock.mymethod(Mockito.eq("something_else")));
Run Code Online (Sandbox Code Playgroud)

我总是通过考试.如何完成验证(如果可能)?

谢谢.

java junit unit-testing mockito

187
推荐指数
6
解决办法
23万
查看次数

如何告诉Mockito模拟对象在下次调用时返回不同的东西?

所以,我正在创建一个模拟对象作为类级别的静态变量,如此...在一个测试中,我想Foo.someMethod()返回一个特定的值,而在另一个测试中,我希望它返回一个不同的值.我遇到的问题是,似乎我需要重建模拟才能使其正常工作.我想避免重建模拟,并在每次测试中使用相同的对象.

class TestClass {

    private static Foo mockFoo;

    @BeforeClass
    public static void setUp() {
        mockFoo = mock(Foo.class);
    }

    @Test
    public void test1() {
        when(mockFoo.someMethod()).thenReturn(0);

        TestObject testObj = new TestObject(mockFoo);

        testObj.bar(); // calls mockFoo.someMethod(), receiving 0 as the value

    }

    @Test
    public void test2() {
        when(mockFoo.someMethod()).thenReturn(1);

        TestObject testObj = new TestObject(mockFoo);

        testObj.bar(); // calls mockFoo.someMethod(), STILL receiving 0 as the value, instead of expected 1.

    }

}
Run Code Online (Sandbox Code Playgroud)

在第二个测试中,当调用testObj.bar()时,我仍然接收0作为值...解决此问题的最佳方法是什么?请注意,我知道我可以Foo在每个测试中使用不同的模拟,但是,我必须将多个请求链接起来mockFoo,这意味着我必须在每个测试中进行链接.

java junit unit-testing mocking mockito

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

使用Mockito的通用"any()"方法

我有一个接口,其方法需要一个数组Foo:

public interface IBar {
  void doStuff(Foo[] arr);
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Mockito来嘲笑这个界面,我想断言它doStuff()被调用了,但我不想验证传递了什么参数 - "不关心".

如何使用any()泛型方法编写以下代码,而不是anyObject()

IBar bar = mock(IBar.class);
...
verify(bar).doStuff((Foo[]) anyObject());
Run Code Online (Sandbox Code Playgroud)

java unit-testing mocking mockito

181
推荐指数
4
解决办法
29万
查看次数

Mockito验证方法调用的顺序/顺序

有没有办法验证Mockito methodOne之前是否methodTwo有人打电话?

public class ServiceClassA {
    public void methodOne(){}
 }

public class ServiceClassB {
    public void methodTwo(){}
 }
Run Code Online (Sandbox Code Playgroud)
public class TestClass {
    public void method(){
        ServiceClassA serviceA = new ServiceClassA();
        ServiceClassB serviceB = new ServiceClassB();
        serviceA.methodOne();
        serviceB.methodTwo();
    }
}
Run Code Online (Sandbox Code Playgroud)

java unit-testing mockito

179
推荐指数
4
解决办法
8万
查看次数

Mockito - doReturn()和when()之间的区别

我目前正在使用Mockito来模拟Spring MVC应用程序中的服务层对象,我想在其中测试我的Controller方法.然而,正如我一直在阅读Mockito的具体细节,我发现这些方法doReturn(...).when(...)相当于when(...).thenReturn(...).所以,我的问题是什么是有两个方法,做同样的事情或之间有什么细微的区别点doReturn(...).when(...)when(...).thenReturn(...)

任何帮助,将不胜感激.

java unit-testing mockito

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

Mockito:将真实对象注入私有的@Autowired字段

我正在使用Mockito @Mock@InjectMocks注释将依赖项注入到使用Spring注释的私有字段中@Autowired:

@RunWith(MockitoJUnitRunner.class)
public class DemoTest {
    @Mock
    private SomeService service;

    @InjectMocks
    private Demo demo;

    /* ... */
}
Run Code Online (Sandbox Code Playgroud)

public class Demo {

    @Autowired
    private SomeService service;

    /* ... */
}
Run Code Online (Sandbox Code Playgroud)

现在我想将真实对象注入私有@Autowired字段(没有setter).这是可能的还是机制仅限于注射Mocks?

java spring mockito

170
推荐指数
4
解决办法
9万
查看次数

如何用mockito模拟最后一堂课

我有一个最后的课,类似这样:

public final class RainOnTrees{

   public void startRain(){

        // some code here
   }
}
Run Code Online (Sandbox Code Playgroud)

我在其他类中使用此类,如下所示:

public class Seasons{

   RainOnTrees rain = new RainOnTrees();

   public void findSeasonAndRain(){

        rain.startRain();

    }
}
Run Code Online (Sandbox Code Playgroud)

在我的JUnit测试类中,Seasons.java我想模拟这个RainOnTrees类.我怎么能和Mockito一起做这件事?

java junit mockito

169
推荐指数
13
解决办法
21万
查看次数

Mockito:列出具有泛型的Matchers

Mockito提供:

when(mock.process(Matchers.any(List.class)));
Run Code Online (Sandbox Code Playgroud)

如何避免警告,如果process需要List<Bar>呢?

java generics warnings matcher mockito

160
推荐指数
3
解决办法
11万
查看次数

如何使用ArgumentCaptor进行存根?

在Mockito 文档javadocs中

建议使用ArgumentCaptor进行验证,但不使用stubbing.

但我不明白ArgumentCaptor如何用于存根.有人可以解释上面的陈述,并说明ArgumentCaptor如何用于存根或提供一个链接,说明如何做到这一点?

java junit unit-testing mockito

156
推荐指数
1
解决办法
14万
查看次数

标签 统计

java ×10

mockito ×10

unit-testing ×7

junit ×5

mocking ×2

generics ×1

matcher ×1

spring ×1

warnings ×1