我有下面的类和测试代码编写现在,它是工作良好。
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());
}
}
直到这里一切正常,考试通过。现在我想在appleregistryclass中引入新的依赖关系这里是更改
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();
}
}
现在,当我为新更改编写测试时,它将超时测试代码:
@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());
}
}
有人能帮我写appleregistry的测试类吗。提前谢谢!
1条答案
按热度按时间vzgqcmou1#
我做了这样的事。这是一个糟糕的编码实践吗?