/*
* Copyright (c) 2006-2011 Rogério Liesenfeld
* This file is subject to the terms of the MIT license (see LICENSE.txt).
*/
package mockit;
import org.junit.*;
import static mockit.Instantiation.*;
import static mockit.Mockit.*;
import static org.junit.Assert.*;
@UsingMocksAndStubs(MockClassInstantiationPerSetupTest.MockClass1.class)
public final class MockClassInstantiationPerSetupTest
{
static final class RealClass1
{
static void doSomething()
{
throw new RuntimeException();
}
int performComputation(int a, boolean b)
{
return b ? a : -a;
}
}
static final class RealClass2
{
static void doSomething()
{
throw new RuntimeException();
}
int performComputation(int a, boolean b)
{
return b ? a : -a;
}
}
static final class RealClass3
{
static void doSomething()
{
throw new RuntimeException();
}
int performComputation(int a, boolean b)
{
return b ? a : -a;
}
}
static final class RealClass4
{
static void doSomething()
{
throw new RuntimeException();
}
int performComputation(int a, boolean b)
{
return b ? a : -a;
}
}
@MockClass(realClass = RealClass1.class, instantiation = PerMockSetup)
static final class MockClass1
{
static Object singleInstanceCreated;
MockClass1()
{
assertNull(singleInstanceCreated);
singleInstanceCreated = this;
}
@Mock void doSomething() { assertSame(singleInstanceCreated, this); }
@Mock int performComputation(int a, boolean b)
{
assertSame(singleInstanceCreated, this);
assertTrue(a > 0); assertTrue(b); return 2;
}
}
@MockClass(realClass = RealClass2.class, instantiation = PerMockSetup)
static final class MockClass2
{
static Object singleInstanceCreated;
MockClass2()
{
assertNull(singleInstanceCreated);
singleInstanceCreated = this;
}
@Mock void doSomething() { assertSame(singleInstanceCreated, this); }
@Mock int performComputation(int a, boolean b)
{
assertSame(singleInstanceCreated, this);
assertTrue(a > 0); assertTrue(b); return 2;
}
}
@MockClass(realClass = RealClass3.class, instantiation = PerMockSetup)
static final class MockClass3
{
static Object singleInstanceCreated;
MockClass3()
{
assertNull(singleInstanceCreated);
singleInstanceCreated = this;
}
@Mock void doSomething() { assertSame(singleInstanceCreated, this); }
@Mock int performComputation(int a, boolean b)
{
assertSame(singleInstanceCreated, this);
assertTrue(a > 0); assertTrue(b); return 2;
}
}
@MockClass(realClass = RealClass4.class, instantiation = PerMockSetup)
static final class MockClass4
{
static Object singleInstanceCreated;
MockClass4()
{
assertNull(singleInstanceCreated);
singleInstanceCreated = this;
}
@Mock void doSomething() { assertSame(singleInstanceCreated, this); }
@Mock int performComputation(int a, boolean b)
{
assertSame(singleInstanceCreated, this);
assertTrue(a > 0); assertTrue(b); return 2;
}
}
@BeforeClass
public static void setUpClassLevelMocks()
{
setUpMocksAndStubs(MockClass2.class);
}
@Before
public void setUpMethodLevelMocks()
{
MockClass3.singleInstanceCreated = null;
setUpMock(RealClass3.class, MockClass3.class);
}
@Test
public void mockInstancePerSetupInClassAndFixtureScopes()
{
assertMockClass1();
assertMockClass2();
assertMockClass3();
assertEquals(1, new RealClass4().performComputation(1, true));
}
private void assertMockClass1()
{
RealClass1.doSomething();
assertEquals(2, new RealClass1().performComputation(1, true));
}
private void assertMockClass2()
{
RealClass2.doSomething();
assertEquals(2, new RealClass2().performComputation(1, true));
}
private void assertMockClass3()
{
RealClass3.doSomething();
assertEquals(2, new RealClass3().performComputation(1, true));
}
private void assertMockClass4()
{
RealClass4.doSomething();
assertEquals(2, new RealClass4().performComputation(1, true));
}
@Test
public void mockInstancePerSetupInAllScopes()
{
setUpMocks(MockClass4.class);
assertMockClass1();
assertMockClass2();
assertMockClass3();
assertMockClass4();
}
}