package org.mockitousage.junitrule;
import org.junit.Rule;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.quality.Strictness;
import org.mockito.internal.junit.JUnitRule;
import org.mockito.internal.util.SimpleMockitoLogger;
import org.mockitousage.IMethods;
import org.mockitoutil.ConcurrentTesting;
import org.mockitoutil.SafeJUnitRule;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.when;
import static org.mockitoutil.TestBase.filterLineNo;
public class StubbingWarningsMultiThreadingTest {
private SimpleMockitoLogger logger = new SimpleMockitoLogger();
@Rule public SafeJUnitRule rule = new SafeJUnitRule(new JUnitRule(logger, Strictness.WARN));
@Mock IMethods mock;
@Test public void using_stubbing_from_different_thread() throws Throwable {
//expect no warnings
rule.expectSuccess(new Runnable() {
public void run() {
assertTrue(logger.getLoggedInfo().isEmpty());
}
});
//when stubbing is declared
when(mock.simpleMethod()).thenReturn("1");
//and used from a different thread
ConcurrentTesting.inThread(new Runnable() {
public void run() {
mock.simpleMethod();
}
});
}
@Test public void unused_stub_from_different_thread() throws Throwable {
//expect warnings
rule.expectSuccess(new Runnable() {
public void run() {
assertEquals(
"[MockitoHint] StubbingWarningsMultiThreadingTest.unused_stub_from_different_thread (see javadoc for MockitoHint):\n" +
"[MockitoHint] 1. Unused -> at org.mockitousage.junitrule.StubbingWarningsMultiThreadingTest.unused_stub_from_different_thread(StubbingWarningsMultiThreadingTest.java:0)\n",
filterLineNo(logger.getLoggedInfo()));
}
});
//when stubbings are declared
when(mock.simpleMethod(1)).thenReturn("1");
when(mock.simpleMethod(2)).thenReturn("2");
//and one of the stubbings is used from a different thread
ConcurrentTesting.inThread(new Runnable() {
public void run() {
mock.simpleMethod(1);
}
});
}
}