我对匕首很新 – 我甚至不知道它是否适用于我的应用程序
我写了一个测试来验证当我们搜索一个受欢迎的名人时,结果会出现在页面上.
该页面有一个searchField,它在构造函数中需要页面,因此我用于测试的Web驱动程序可以选择它.
public class CelebritySearchPageTest { @Test public void testSearchResultsForKevinBaconVerifyHisPopularity() { CelebritySearchPage searchPage = new CelebritySearchPage(); searchPage.searchFor("Kevin Bacon"); Assert.assertTrue(searchPage.getNumberOfResults() > 9999999,"Verify that Kevin Bacon is still relevant"); } }
public class CelebritySearchPage extends Page { @Inject @Named("search field") TextField searchField; public void searchFor(String text) { searchField.setText(text); // ... } public int getNumberOfResults() { // ... } }
@Module(injects = CelebritySearchPage.class) public class CelebritySearchPageModule { @Provides @Named("search field") public TextField provideSearchField() { return new TextField(/* How do I get the page? */,"#searchField"); } }
页
public abstract class Page { // ... }
文本域
public class TextField { protected Page page; protected String selector; public TextField(Page page,String selector) { this.page = page; this.selector = selector; } public void setText(String text) { // ... } }
问题是页面需要searchField,但searchField需要页面.我如何克服这种循环依赖?
我无法在CelebritySearchPage内初始化searchField
解决方法
考虑一下:
CelebritySearchPage
public class CelebritySearchPage extends Page { private final Lazy<TextField> searchField; // always prefer constructor injection // avoid @Named if possible,since the compiler cannot check the string @Inject CelebritySearchPage(@Named("search field") Lazy<TextField> searchField) { this.searchField = searchField; } }
文本域
public class TextField { protected final Lazy<Page> page; protected final String selector; @Inject TextField(Lazy<Page> page,String selector) { this.page = page; this.selector = selector; } /* Lazy::get() Return the underlying value,computing the value if necessary. All calls to the same Lazy instance will return the same result. */ }
我想一个懒人也应该足够了.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。