I have following class and test code write now and it is working fine.
public class AppleRegistry {
private final ImmutableMap<String, Apple> appRegistry;
AppleRegistry(Apple... apple) {
this.appRegistry = createRegistry(apple);
}
@Inject
AppleRegistry(
Provider<GoodApple> goodAppleProvider,
Provider<BadApple> badAppleProvider,
Provider<BrandedApple> brandedAppleProvider) {
this(goodAppleProvider.get(), badAppleProvider.get(), brandedAppleProvider.get());
}
private static ImmutableMap<String, Apple> createRegistry(Apple... apple){......}
public Apple findApple(String key) {....}
}
public interface Apple{
...
}
public class GoodApple implements Apple {
private final Producer producer;
private final Suuplier supplier;
@Inject
GoodApple(Producer producer, Supplier supplier) {....}
....
}
public class BadApple implements Apple {.....}
public class BrandedApple implements Apple {....}
Test class
@RunWith(JUnit4.class)
@SmallTest
public class AppleRegistryTest {
@Before
public void setUp() throws Exception {
Guice.createInjector().injectMemeber(this);
}
@Test
public void testFindApple_emptyRegistry() {
Optional<Apple> apple = new AppleRegistry().findApple("First");
assertFalse(apple.isPresent());
}
}
Till here everything is working fine and the test is passing. Now I want to introduce new dependency in AppleRegistryClass Here are the changes
public class AppleRegistry {
private final ImmutableMap<String, Apple> appRegistry;
private final SystemHelper systemHelper;
AppleRegistry(SystemHelper systemHelper, Apple... apple) {
this.systemHelper = systemHelper;
this.appRegistry = createRegistry(apple);
}
@Inject
AppleRegistry(
Provider<GoodApple> goodAppleProvider,
Provider<BadApple> badAppleProvider,
Provider<BrandedApple> brandedAppleProvider
SystemHelper systemHelper) {
this(systemHelper, goodAppleProvider.get(), badAppleProvider.get(), brandedAppleProvider.get());
}
private static ImmutableMap<String, Apple> createRegistry(Apple... apple){......}
public Apple findApple(String key) {....}
}
// This is an existing class
@Singleton
public class SystemHelper {
private final SystemDao systemDao;
@inject
public SystemHelper(SystemDao systemDao) {
this.systemDao = systemDao;
}
....
}
public class SystemDao {
private final SpannerProtoDao<SystemConfig> spannerProtoDao;
@Inject
public SystemDao(@AbcDatabase Database abcDatabase) {
spannerProtoDao = SpannerProtoDao.newBuilder(SystemConfig.class)
.setDatabase(abcDatabase)
.setTable("Table").setMessageColumn("column")
.build();
}
}
Now when I write the test for new changes it is getting timed out Test code:
@RunWith(JUnit4.class)
@SmallTest
public class AppleRegistryTest {
private final SystemHelper systemHelper;
@Before
public void setUp() throws Exception {
Guice.createInjector((Module) new SystemHelper(new SystemDao(TestUtil.createDatabase()))).injectMemeber(this);
}
@Test
public void testFindApple_emptyRegistry() {
Optional<Apple> apple = new AppleRegistry(systemHelper).findApple("First");
assertFalse(apple.isPresent());
}
}
Can someone please help me in writing the test class for AppleRegistry. Thanks in advance!
I did something like this. Is this a bad coding practice?
public class AppleRegistryTest {
@Rule public final Mocks mocks = new Mocks(this);
@Mock private SystemHelper systemHelper;
@Test
public void testFindApple_emptyRegistry() {
Mockito.when(systemHelper.isXyzEnabled()).thenReturn(False);
Apple apple = new AppleRegistry(systemHelper).findApple("First");
assertFalse(apple.isPresent());
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.