Home | History | Annotate | Download | only in session
      1 /*
      2  * Copyright (c) 2018 Mockito contributors
      3  * This program is made available under the terms of the MIT License.
      4  */
      5 package org.mockito.internal.session;
      6 
      7 import org.junit.After;
      8 import org.junit.Test;
      9 import org.mockito.Mock;
     10 import org.mockito.MockitoSession;
     11 import org.mockito.StateMaster;
     12 import org.mockito.exceptions.misusing.UnfinishedMockingSessionException;
     13 import org.mockito.quality.Strictness;
     14 import org.mockito.session.MockitoSessionLogger;
     15 import org.mockitoutil.ThrowableAssert;
     16 
     17 import java.util.ArrayList;
     18 import java.util.List;
     19 import java.util.Set;
     20 
     21 import static org.junit.Assert.assertFalse;
     22 import static org.junit.Assert.assertNotNull;
     23 import static org.mockito.Mockito.when;
     24 import static org.mockito.quality.Strictness.WARN;
     25 
     26 public class DefaultMockitoSessionBuilderTest {
     27 
     28     @After public void after() {
     29         new StateMaster().clearMockitoListeners();
     30     }
     31 
     32     @Test public void creates_sessions() {
     33         //no configuration is legal
     34         new DefaultMockitoSessionBuilder().startMocking().finishMocking();
     35 
     36         //passing null to configuration is legal, default value will be used
     37         new DefaultMockitoSessionBuilder().initMocks((Object) null).startMocking().finishMocking();
     38         new DefaultMockitoSessionBuilder().initMocks((Object[]) null).startMocking().finishMocking();
     39         new DefaultMockitoSessionBuilder().initMocks(null, null).strictness(null).startMocking().finishMocking();
     40         new DefaultMockitoSessionBuilder().strictness(null).startMocking().finishMocking();
     41 
     42         //happy path
     43         new DefaultMockitoSessionBuilder().initMocks(this).startMocking().finishMocking();
     44         new DefaultMockitoSessionBuilder().initMocks(new Object()).startMocking().finishMocking();
     45         new DefaultMockitoSessionBuilder().strictness(Strictness.LENIENT).startMocking().finishMocking();
     46     }
     47 
     48     @Test public void creates_sessions_for_multiple_test_class_instances_for_repeated_calls() {
     49         TestClass testClass = new TestClass();
     50         TestClass.NestedTestClass nestedTestClass = testClass.new NestedTestClass();
     51 
     52         new DefaultMockitoSessionBuilder().initMocks(testClass).initMocks(nestedTestClass).startMocking().finishMocking();
     53 
     54         assertNotNull(testClass.set);
     55         assertNotNull(nestedTestClass.list);
     56     }
     57 
     58     @Test public void creates_sessions_for_multiple_test_class_instances_for_varargs_call() {
     59         TestClass testClass = new TestClass();
     60         TestClass.NestedTestClass nestedTestClass = testClass.new NestedTestClass();
     61 
     62         new DefaultMockitoSessionBuilder().initMocks(testClass, nestedTestClass).startMocking().finishMocking();
     63 
     64         assertNotNull(testClass.set);
     65         assertNotNull(nestedTestClass.list);
     66     }
     67 
     68     @Test public void uses_logger_and_strictness() {
     69         TestClass testClass = new TestClass();
     70 
     71         final List<String> hints = new ArrayList<String>();
     72         MockitoSession session = new DefaultMockitoSessionBuilder()
     73             .initMocks(testClass)
     74             .strictness(WARN)
     75             .logger(new MockitoSessionLogger() {
     76                 @Override
     77                 public void log(String hint) {
     78                     hints.add(hint);
     79                 }
     80             })
     81             .startMocking();
     82 
     83         when(testClass.set.add(1)).thenReturn(true);
     84 
     85         session.finishMocking();
     86 
     87         assertFalse(hints.isEmpty());
     88     }
     89 
     90     @Test public void requires_finish_mocking() {
     91         new DefaultMockitoSessionBuilder().startMocking();
     92 
     93         ThrowableAssert.assertThat(new Runnable() {
     94             public void run() {
     95                 new DefaultMockitoSessionBuilder().startMocking();
     96             }
     97         }).throwsException(UnfinishedMockingSessionException.class);
     98     }
     99 
    100     class TestClass {
    101 
    102         @Mock public Set<Object> set;
    103 
    104         class NestedTestClass {
    105             @Mock public List<Object> list;
    106         }
    107     }
    108 }
    109