package org.mockito.internal.creation.instance; import static org.assertj.core.api.Assertions.assertThat; import org.junit.Test; import org.mockitoutil.TestBase; import static junit.framework.TestCase.assertEquals; import static junit.framework.TestCase.fail; public class ConstructorInstantiatorTest extends TestBase { static class SomeClass { } class SomeInnerClass { } class ChildOfThis extends ConstructorInstantiatorTest { } static class SomeClass2 { SomeClass2(String x) { } } @Test public void creates_instances() { assertEquals(new ConstructorInstantiator(null).newInstance(SomeClass.class).getClass(), SomeClass.class); } @Test public void creates_instances_of_inner_classes() { assertEquals(new ConstructorInstantiator(this).newInstance(SomeInnerClass.class).getClass(), SomeInnerClass.class); assertEquals(new ConstructorInstantiator(new ChildOfThis()).newInstance(SomeInnerClass.class).getClass(), SomeInnerClass.class); } @Test public void explains_when_constructor_cannot_be_found() { try { new ConstructorInstantiator(null).newInstance(SomeClass2.class); fail(); } catch (InstantiationException e) { assertThat(e).hasMessageContaining("Unable to create instance of 'SomeClass2'.\n" + "Please ensure it has 0-arg constructor which invokes cleanly."); } } }