/* * Copyright 2009 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package samples.junit4.stubmethod; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.reflect.exceptions.MethodNotFoundException; import org.powermock.reflect.exceptions.TooManyMethodsFoundException; import samples.suppressmethod.SuppressMethod; import static junit.framework.Assert.fail; import static org.junit.Assert.assertEquals; import static org.powermock.api.support.membermodification.MemberMatcher.method; import static org.powermock.api.support.membermodification.MemberModifier.stub; @RunWith(PowerMockRunner.class) @PrepareForTest(SuppressMethod.class) public class StubMethodTest { @Test public void whenStubbingInstanceMethodTheMethodReturnsTheStubbedValue() throws Exception { String expectedValue = "Hello"; stub(method(SuppressMethod.class, "getObject")).toReturn(expectedValue); SuppressMethod tested = new SuppressMethod(); assertEquals(expectedValue, tested.getObject()); assertEquals(expectedValue, tested.getObject()); } @Test public void whenStubbingStaticMethodTheMethodReturnsTheStubbedValue() throws Exception { String expectedValue = "Hello"; stub(method(SuppressMethod.class, "getObjectStatic")).toReturn(expectedValue); assertEquals(expectedValue, SuppressMethod.getObjectStatic()); assertEquals(expectedValue, SuppressMethod.getObjectStatic()); } @Test public void whenStubbingInstanceMethodWithPrimiteValueTheMethodReturnsTheStubbedValue() throws Exception { float expectedValue = 4; stub(method(SuppressMethod.class, "getFloat")).toReturn(expectedValue); SuppressMethod tested = new SuppressMethod(); assertEquals(expectedValue, tested.getFloat(), 0.0f); assertEquals(expectedValue, tested.getFloat(), 0.0f); } @Test(expected = TooManyMethodsFoundException.class) public void whenSeveralMethodsFoundThenTooManyMethodsFoundExceptionIsThrown() throws Exception { stub(method(SuppressMethod.class, "sameName")); } @Test(expected = MethodNotFoundException.class) public void whenNoMethodsFoundThenMethodNotFoundExceptionIsThrown() throws Exception { stub(method(SuppressMethod.class, "notFound")); } @Test public void whenStubbingInstanceMethodByPassingTheMethodTheMethodReturnsTheStubbedValue() throws Exception { String expected = "Hello"; stub(method(SuppressMethod.class, "getObject")).toReturn(expected); SuppressMethod tested = new SuppressMethod(); assertEquals(expected, tested.getObject()); assertEquals(expected, tested.getObject()); } @Test public void whenStubbingStaticMethodByPassingTheMethodTheMethodReturnsTheStubbedValue() throws Exception { String expected = "Hello"; stub(method(SuppressMethod.class, "getObjectStatic")).toReturn(expected); assertEquals(expected, SuppressMethod.getObjectStatic()); assertEquals(expected, SuppressMethod.getObjectStatic()); } @Test(expected = ClassCastException.class) public void whenStubbingInstanceMethodWithWrongReturnTypeThenClasscastExceptionIsThrown() throws Exception { String illegalReturnType = "Hello"; stub(method(SuppressMethod.class, "getFloat")).toReturn(illegalReturnType); SuppressMethod tested = new SuppressMethod(); tested.getFloat(); } @Test public void whenStubbingInstanceMethodToThrowExceptionTheMethodThrowsTheStubbedException() throws Exception { Exception expected = new Exception("message"); stub(method(SuppressMethod.class, "getObject")).toThrow(expected); SuppressMethod tested = new SuppressMethod(); try { tested.getObject(); fail(); } catch (Exception e) { assertEquals("message", e.getMessage()); } } @Test public void whenStubbingStaticMethodToThrowExceptionTheMethodThrowsTheStubbedException() throws Exception { Exception expected = new Exception("message"); stub(method(SuppressMethod.class, "getObjectStatic")).toThrow(expected); try { SuppressMethod.getObjectStatic(); fail(); } catch (Exception e) { assertEquals("message", e.getMessage()); } } }