package org.mockserver.junit; import org.junit.Before; import org.junit.Test; import org.junit.runner.Description; import org.junit.runners.model.Statement; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockserver.client.proxy.ProxyClient; import org.mockserver.integration.ClientAndProxy; import org.mockserver.socket.PortFactory; import static org.hamcrest.Matchers.nullValue; import static org.hamcrest.Matchers.sameInstance; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.*; import static org.mockito.MockitoAnnotations.initMocks; /** * @author jamesdbloom */ public class ProxyRuleTestWithMocks { @Mock private Statement mockStatement; @Mock private ClientAndProxy mockClientAndProxy; private ProxyClient proxyClient; @Mock private ProxyRule.ClientAndProxyFactory clientAndProxyFactory; private int httpPort; @InjectMocks private ProxyRule mockServerRuleDynamicPorts; @InjectMocks private ProxyRule mockServerRuleHttpPort; @InjectMocks private ProxyRule mockServerRulePerSuite; @InjectMocks private ProxyRule mockServerRulePerSuiteDuplicate; @Before public void setupFixture() { httpPort = PortFactory.findFreePort(); mockServerRuleDynamicPorts = new ProxyRule(this); mockServerRuleHttpPort = new ProxyRule(httpPort, this, false); mockServerRulePerSuite = new ProxyRule(httpPort, this, true); mockServerRulePerSuiteDuplicate = new ProxyRule(httpPort, this, true); initMocks(this); when(clientAndProxyFactory.newClientAndProxy()).thenReturn(mockClientAndProxy); } @Test public void shouldStartAndStopProxyWithDynamicPort() throws Throwable { // when mockServerRuleDynamicPorts.apply(mockStatement, Description.EMPTY).evaluate(); // then assertThat((ClientAndProxy) proxyClient, is(mockClientAndProxy)); verify(mockStatement).evaluate(); verify(mockClientAndProxy).stop(); } @Test public void shouldStartAndStopProxy() throws Throwable { // when mockServerRuleHttpPort.apply(mockStatement, Description.EMPTY).evaluate(); // then assertThat((ClientAndProxy) proxyClient, sameInstance(mockClientAndProxy)); assertThat(mockServerRuleHttpPort.getHttpPort(), is(httpPort)); verify(mockStatement).evaluate(); verify(mockClientAndProxy).stop(); } @Test public void shouldStartAndStopProxyOncePerSuite() throws Throwable { // when mockServerRulePerSuite.apply(mockStatement, Description.EMPTY).evaluate(); // then assertThat((ClientAndProxy) proxyClient, is(mockClientAndProxy)); assertThat(mockServerRulePerSuite.getHttpPort(), is(httpPort)); verify(mockStatement).evaluate(); verify(clientAndProxyFactory, times(1)).newClientAndProxy(); verify(mockClientAndProxy, times(0)).stop(); reset(mockStatement, clientAndProxyFactory); // when mockServerRulePerSuiteDuplicate.apply(mockStatement, Description.EMPTY).evaluate(); // then assertThat((ClientAndProxy) proxyClient, is(mockClientAndProxy)); assertThat(mockServerRulePerSuiteDuplicate.getHttpPort(), is(httpPort)); verify(mockStatement).evaluate(); verify(clientAndProxyFactory, times(0)).newClientAndProxy(); verify(mockClientAndProxy, times(0)).stop(); } }