package org.roboguice.astroboy.activity;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.roboguice.astroboy.controller.Astroboy;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import roboguice.RoboGuice;
import com.google.inject.AbstractModule;
/**
* A testcase that swaps in a dependency of a RoboActivity to verify that
* it properly uses it.
*/
@RunWith(RobolectricTestRunner.class)
public class FightForcesOfEvilTest {
private Astroboy astroboyMock = mock(Astroboy.class);
@Before
public void setup() {
// Override the default RoboGuice module
RoboGuice.overrideApplicationInjector(Robolectric.application, new MyTestModule());
}
@After
public void teardown() {
// Don't forget to tear down our custom injector to avoid polluting other test classes
RoboGuice.Util.reset();
}
@Test
public void createTriggersPunch() throws InterruptedException {
Robolectric.buildActivity(FightForcesOfEvilActivity.class).create().start();
Thread.sleep(6*1000);
verify(astroboyMock, Mockito.times(10)).punch();
}
public class MyTestModule extends AbstractModule {
@Override
protected void configure() {
bind(Astroboy.class).toInstance(astroboyMock);
}
}
}