1/* 2 * Copyright (c) 2017 Mockito contributors 3 * This program is made available under the terms of the MIT License. 4 */ 5package org.mockitousage.junitrule; 6 7import org.junit.Rule; 8import org.junit.Test; 9import org.mockito.Mock; 10import org.mockito.quality.Strictness; 11import org.mockito.internal.junit.JUnitRule; 12import org.mockito.internal.util.SimpleMockitoLogger; 13import org.mockitousage.IMethods; 14import org.mockitoutil.ConcurrentTesting; 15import org.mockitoutil.SafeJUnitRule; 16 17import static org.junit.Assert.assertEquals; 18import static org.junit.Assert.assertTrue; 19import static org.mockito.Mockito.when; 20import static org.mockitoutil.TestBase.filterLineNo; 21 22public class StubbingWarningsMultiThreadingTest { 23 24 private SimpleMockitoLogger logger = new SimpleMockitoLogger(); 25 @Rule public SafeJUnitRule rule = new SafeJUnitRule(new JUnitRule(logger, Strictness.WARN)); 26 @Mock IMethods mock; 27 28 @Test public void using_stubbing_from_different_thread() throws Throwable { 29 //expect no warnings 30 rule.expectSuccess(new Runnable() { 31 public void run() { 32 assertTrue(logger.getLoggedInfo().isEmpty()); 33 } 34 }); 35 36 //when stubbing is declared 37 when(mock.simpleMethod()).thenReturn("1"); 38 //and used from a different thread 39 ConcurrentTesting.inThread(new Runnable() { 40 public void run() { 41 mock.simpleMethod(); 42 } 43 }); 44 } 45 46 @Test public void unused_stub_from_different_thread() throws Throwable { 47 //expect warnings 48 rule.expectSuccess(new Runnable() { 49 public void run() { 50 assertEquals( 51 "[MockitoHint] StubbingWarningsMultiThreadingTest.unused_stub_from_different_thread (see javadoc for MockitoHint):\n" + 52 "[MockitoHint] 1. Unused -> at org.mockitousage.junitrule.StubbingWarningsMultiThreadingTest.unused_stub_from_different_thread(StubbingWarningsMultiThreadingTest.java:0)\n", 53 filterLineNo(logger.getLoggedInfo())); 54 } 55 }); 56 57 //when stubbings are declared 58 when(mock.simpleMethod(1)).thenReturn("1"); 59 when(mock.simpleMethod(2)).thenReturn("2"); 60 61 //and one of the stubbings is used from a different thread 62 ConcurrentTesting.inThread(new Runnable() { 63 public void run() { 64 mock.simpleMethod(1); 65 } 66 }); 67 } 68 69} 70