/* * Copyright (c) 2006-2011 Rogério Liesenfeld * This file is subject to the terms of the MIT license (see LICENSE.txt). */ package mockit; import static org.junit.Assert.*; import org.junit.*; public final class StubOutTest { static class RealClass { private static final boolean staticInitializerExecuted; static { staticInitializerExecuted = true; } int doSomething() { return 1; } private static void tryAndFail(String s) { throw new AssertionError(s); } long getLongValue() { return 15L; } static float getFloatValue() { return 1.5F; } synchronized double getDoubleValue() { return 1.5; } int[][] getMatrix() { return null; } boolean[] getBooleans() { return null; } char[] getChars() { return null; } byte[] getBytes() { return null; } short[] getShorts() { return null; } int[] getInts() { return null; } long[] getLongs() { return null; } float[] getFloats() { return null; } double[] getDoubles() { return null; } Object[] getObjects() { return null; } } @Test public void stubOutMethodsAndStaticInitializer() { Mockit.stubOut(RealClass.class); assertFalse(RealClass.staticInitializerExecuted); RealClass obj = new RealClass(); assertEquals(0, obj.doSomething()); assertEquals(0L, obj.getLongValue()); assertEquals(0.0F, RealClass.getFloatValue(), 0); assertEquals(0.0, obj.getDoubleValue(), 0); assertArrayEquals(new int[0][0], obj.getMatrix()); assertEquals(0, obj.getBooleans().length); assertArrayEquals(new char[0], obj.getChars()); assertArrayEquals(new byte[0], obj.getBytes()); assertArrayEquals(new short[0], obj.getShorts()); assertArrayEquals(new int[0], obj.getInts()); assertArrayEquals(new long[0], obj.getLongs()); assertArrayEquals(new float[0], obj.getFloats(), 0); assertArrayEquals(new double[0], obj.getDoubles(), 0); assertArrayEquals(new Object[0], obj.getObjects()); RealClass.tryAndFail("test"); } static final class AnotherRealClass { AnotherRealClass() { throw new IllegalStateException("should not happen"); } private String getText(boolean b) { return "" + b; } } @Test public void stubOutClass() { Mockit.stubOutClass(AnotherRealClass.class); assertNull(new AnotherRealClass().getText(true)); } @Test public void stubOutClassByName() { Mockit.stubOutClass(AnotherRealClass.class.getName()); assertNull(new AnotherRealClass().getText(true)); } static final class YetAnotherRealClass { private final int value; YetAnotherRealClass() { value = 123; } YetAnotherRealClass(int value) { this.value = value; } public String doSomething(RealClass a, AnotherRealClass b) { a.doSomething(); return b.getText(false); } } @Test public void stubOutClassUsingFilters() { Mockit.stubOutClass(YetAnotherRealClass.class, "doSomething"); YetAnotherRealClass obj = new YetAnotherRealClass(); assertEquals(123, obj.value); assertNull(obj.doSomething(null, null)); } @Test public void stubOutClassUsingFiltersByName() { Mockit.stubOutClass(YetAnotherRealClass.class.getName(), "doSomething"); YetAnotherRealClass obj = new YetAnotherRealClass(); assertEquals(123, obj.value); assertNull(obj.doSomething(null, null)); } @Test public void stubOutClassUsingInverseFilters() { Mockit.stubOutClass(AnotherRealClass.class, true, "getText(boolean)"); Mockit.stubOutClass(YetAnotherRealClass.class, false, "()", "(int)"); assertEquals(0, new YetAnotherRealClass(45).value); YetAnotherRealClass obj = new YetAnotherRealClass(); assertEquals(0, obj.value); assertEquals("false", obj.doSomething(new RealClass(), new AnotherRealClass())); } @Test public void stubOutClassUsingInverseFiltersByName() { Mockit.stubOutClass(AnotherRealClass.class.getName(), true, "getText(boolean)"); Mockit.stubOutClass(YetAnotherRealClass.class.getName(), false, "()", "(int)"); assertEquals(0, new YetAnotherRealClass(45).value); YetAnotherRealClass obj = new YetAnotherRealClass(); assertEquals(0, obj.value); assertEquals("false", obj.doSomething(new RealClass(), new AnotherRealClass())); } @Test public void stubOutClassThenSetUpMockMethodsForIt() { Mockit.stubOut(AnotherRealClass.class); new MockUp<AnotherRealClass>() { @Mock String getText(boolean b) { return b ? "mocked" : "MOCKED"; } }; assertEquals("mocked", new AnotherRealClass().getText(true)); assertEquals("MOCKED", new AnotherRealClass().getText(false)); } }