1e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/* 2e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Copyright (c) 2007 Mockito contributors 3e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * This program is made available under the terms of the MIT License. 4e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 5e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpackage org.mockito; 6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.listeners.InvocationListener; 8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.mock.MockCreationSettings; 9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.stubbing.Answer; 10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.io.Serializable; 12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/** 14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Allows mock creation with additional mock settings. 15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p/> 16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Don't use it too often. 17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Consider writing simple tests that use simple mocks. 18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Repeat after me: simple tests push simple, KISSy, readable & maintainable code. 19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * If you cannot write a test in a simple way - refactor the code under test. 20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p/> 21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Examples of mock settings: 22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <pre class="code"><code class="java"> 23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * //Creates mock with different default answer & name 24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Foo mock = mock(Foo.class, withSettings() 25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * .defaultAnswer(RETURNS_SMART_NULLS) 26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * .name("cool mockie") 27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * ); 28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 29e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * //Creates mock with different default answer, descriptive name and extra interfaces 30e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Foo mock = mock(Foo.class, withSettings() 31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * .defaultAnswer(RETURNS_SMART_NULLS) 32e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * .name("cool mockie") 33e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * .extraInterfaces(Bar.class)); 34e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </code></pre> 35e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * {@link MockSettings} has been introduced for two reasons. 36e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Firstly, to make it easy to add another mock setting when the demand comes. 37e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Secondly, to enable combining together different mock settings without introducing zillions of overloaded mock() methods. 38e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 39e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic interface MockSettings extends Serializable { 40e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 41e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson /** 42e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Specifies extra interfaces the mock should implement. Might be useful for legacy code or some corner cases. 43e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * For background, see issue 51 <a href="http://code.google.com/p/mockito/issues/detail?id=51">here</a> 44e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p> 45e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * This mysterious feature should be used very occasionally. 46e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * The object under test should know exactly its collaborators & dependencies. 47e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * If you happen to use it often than please make sure you are really producing simple, clean & readable code. 48e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p> 49e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Examples: 50e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <pre class="code"><code class="java"> 51e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Foo foo = mock(Foo.class, withSettings().extraInterfaces(Bar.class, Baz.class)); 52e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 53e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * //now, the mock implements extra interfaces, so following casting is possible: 54e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Bar bar = (Bar) foo; 55e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Baz baz = (Baz) foo; 56e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </code></pre> 57e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 58e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @param interfaces extra interfaces the should implement. 59e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @return settings instance so that you can fluently specify other settings 60e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 61e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson MockSettings extraInterfaces(Class<?>... interfaces); 62e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 63e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson /** 64e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Specifies mock name. Naming mocks can be helpful for debugging - the name is used in all verification errors. 65e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p> 66e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Beware that naming mocks is not a solution for complex code which uses too many mocks or collaborators. 67e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <b>If you have too many mocks then refactor the code</b> so that it's easy to test/debug without necessity of naming mocks. 68e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p> 69e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <b>If you use @Mock annotation then you've got naming mocks for free!</b> @Mock uses field name as mock name. {@link Mock Read more.} 70e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p> 71e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Examples: 72e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <pre class="code"><code class="java"> 73e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Foo foo = mock(Foo.class, withSettings().name("foo")); 74e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 75e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * //Below does exactly the same: 76e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Foo foo = mock(Foo.class, "foo"); 77e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </code></pre> 78e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @param name the name of the mock, later used in all verification errors 79e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @return settings instance so that you can fluently specify other settings 80e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 81e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson MockSettings name(String name); 82e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 83e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson /** 84e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Specifies the instance to spy on. Makes sense only for spies/partial mocks. 85e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 86e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Sets the instance that will be spied. Actually copies the internal fields of the passed instance to the mock. 87e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p> 88e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * As usual you are going to read <b>the partial mock warning</b>: 89e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Object oriented programming is more or less about tackling complexity by dividing the complexity into separate, specific, SRPy objects. 90e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * How does partial mock fit into this paradigm? Well, it just doesn't... 91e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Partial mock usually means that the complexity has been moved to a different method on the same object. 92e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * In most cases, this is not the way you want to design your application. 93e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p> 94e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * However, there are rare cases when partial mocks come handy: 95e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * dealing with code you cannot change easily (3rd party interfaces, interim refactoring of legacy code etc.) 96e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * However, I wouldn't use partial mocks for new, test-driven & well-designed code. 97e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p> 98e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Enough warnings about partial mocks, see an example how spiedInstance() works: 99e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <pre class="code"><code class="java"> 100e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Foo foo = mock(Foo.class, withSettings().spiedInstance(fooInstance)); 101e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 102e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * //Below does exactly the same: 103e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Foo foo = spy(fooInstance); 104e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </code></pre> 105e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 106e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * About stubbing for a partial mock, as it is a spy it will always call the real method, unless you use the 107e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <code>doReturn</code>|<code>Throw</code>|<code>Answer</code>|<code>CallRealMethod</code> stubbing style. Example: 108e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 109e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <pre class="code"><code class="java"> 110e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * List list = new LinkedList(); 111e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * List spy = spy(list); 112e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 113e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * //Impossible: real method is called so spy.get(0) throws IndexOutOfBoundsException (the list is yet empty) 114e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * when(spy.get(0)).thenReturn("foo"); 115e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 116e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * //You have to use doReturn() for stubbing 117e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * doReturn("foo").when(spy).get(0); 118e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </code> 119e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 120e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @param instance to spy on 121e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @return settings instance so that you can fluently specify other settings 122e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 123e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson MockSettings spiedInstance(Object instance); 124e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 125e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson /** 126e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Specifies default answers to interactions. 127e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * It's quite advanced feature and typically you don't need it to write decent tests. 128e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * However it can be helpful when working with legacy systems. 129e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p> 130e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * It is the default answer so it will be used <b>only when you don't</b> stub the method call. 131e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 132e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <pre class="code"><code class="java"> 133e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Foo mock = mock(Foo.class, withSettings().defaultAnswer(RETURNS_SMART_NULLS)); 134e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Foo mockTwo = mock(Foo.class, withSettings().defaultAnswer(new YourOwnAnswer())); 135e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 136e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * //Below does exactly the same: 137e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Foo mockTwo = mock(Foo.class, new YourOwnAnswer()); 138e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </code></pre> 139e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 140e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @param defaultAnswer default answer to be used by mock when not stubbed 141e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @return settings instance so that you can fluently specify other settings 142e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 143e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson @SuppressWarnings("unchecked") 144e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson MockSettings defaultAnswer(Answer defaultAnswer); 145e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 146e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson /** 147e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Configures the mock to be serializable. With this feature you can use a mock in a place that requires dependencies to be serializable. 148e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p> 149e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * WARNING: This should be rarely used in unit testing. 150e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p> 151e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * The behaviour was implemented for a specific use case of a BDD spec that had an unreliable external dependency. This 152e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * was in a web environment and the objects from the external dependency were being serialized to pass between layers. 153e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p> 154e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Example: 155e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <pre class="code"><code class="java"> 156e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * List serializableMock = mock(List.class, withSettings().serializable()); 157e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </code></pre> 158e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 159e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @return settings instance so that you can fluently specify other settings 160e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @since 1.8.1 161e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 162e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson MockSettings serializable(); 163e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 164e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson /** 165e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Enables real-time logging of method invocations on this mock. Can be used 166e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * during test debugging in order to find wrong interactions with this mock. 167e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p> 168e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Invocations are logged as they happen to the standard output stream. 169e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p> 170e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Calling this method multiple times makes no difference. 171e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p> 172e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Example: 173e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <pre class="code"><code class="java"> 174e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * List mockWithLogger = mock(List.class, withSettings().verboseLogging()); 175e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </code></pre> 176e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 177e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @return settings instance so that you can fluently specify other settings 178e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 179e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson MockSettings verboseLogging(); 180e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 181e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson /** 182e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Registers a listener for method invocations on this mock. The listener is 183e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * notified every time a method on this mock is called. 184e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p> 185e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Multiple listeners may be added, but the same object is only added once. 186e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * The order, in which the listeners are added, is not guaranteed to be the 187e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * order in which the listeners are notified. 188e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 189e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Example: 190e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <pre class="code"><code class="java"> 191e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * List mockWithListener = mock(List.class, withSettings().invocationListeners(new YourInvocationListener())); 192e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </code></pre> 193e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 194e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * See the {@link InvocationListener listener interface} for more details. 195e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 196e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @param listeners The invocation listeners to add. May not be null. 197e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @return settings instance so that you can fluently specify other settings 198e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 199e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson MockSettings invocationListeners(InvocationListener... listeners); 200e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 201e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson /** 202e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Sets whether this mock should only provide stubbing of methods. 203e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * A stub-only mock does not record method 204e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * invocations, thus saving memory but 205e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * disallowing verification of invocations. 206e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p> 207e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Example: 208e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <pre class="code"><code class="java"> 209e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * List stubOnly = mock(List.class, withSettings().stubOnly()); 210e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </code></pre> 211e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 212e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @return settings instance so that you can fluently specify other settings 213e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 214e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson MockSettings stubOnly();} 215