Mockito获取所有模拟对象

use*_*133 2 java testing unit-testing mocking mockito

我想获取所有模拟对象的列表。使用早期版本的Mockito,我可以这样做:

List<Object> createdMocks = new LinkedList<Object>();
MockingProgress progress = new ThreadSafeMockingProgress();
progress.setListener(new CollectCreatedMocks(createdMocks));
Run Code Online (Sandbox Code Playgroud)

这些侦听器已在最新的2.8版Mockito中删除,还有其他替代方法吗?

gly*_*ing 6

Since Mockito 2.x this has been replaced by implementations of org.mockito.listeners.MockitoListener which you engage like so:

Mockito.framework().addListener()
Run Code Online (Sandbox Code Playgroud)

For example:

@Test
public void listAllMocks() {
    List<Object> mocks = new ArrayList<>();

    // can be replaced by a lambda if using java 8+
    Mockito.framework().addListener(new MockCreationListener() {
        @Override
        public void onMockCreated(Object mock, MockCreationSettings settings) {
            mocks.add(mock);
        }
    });

    A a = Mockito.mock(A.class);
    B b = Mockito.mock(B.class);

    // ... do something with a, b

    // verify
    assertThat(mocks.size(), is(2));
    assertThat(mocks, hasItem(a));
    assertThat(mocks, hasItem(b));
}
Run Code Online (Sandbox Code Playgroud)

  • @qoomon 删除换行符并不会使某些内容成为“一行”,它只会使代码的可读性降低。 (2认同)