【问题标题】:Is it possible to use Butterknife to inject views in espresso Test clases in android?是否可以使用 Butterknife 在 android 的 espresso 测试类中注入视图?
【发布时间】:2014-08-07 11:35:10
【问题描述】:

是否可以使用 Butterknife 为测试类注入视图?视图被注入到由我的 MainActivity 类创建和提交的片段中。

这是我的测试类的代码:

public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> {

private MainActivity mMainActivity;
private Button learnButton;
private Button teachButton;

@SuppressWarnings( "deprecation" )
public MainActivityTest() {
    super("com.example.application.app", MainActivity.class);
}

protected void setUp() throws Exception {
    super.setUp();

    mMainActivity = getActivity();
    learnButton = (Button) mMainActivity.findViewById(R.id.buttonLearn);
    teachButton = (Button) mMainActivity.findViewById(R.id.buttonTeach);
}

但是我使用 Butterknife 将视图注入到我的片段中:

public class ChooseActionFragment extends Fragment {

@InjectView(R.id.buttonTeach) Button buttonTeach;
@InjectView(R.id.buttonLearn) Button buttonLearn;

public ChooseActionFragment() { }

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_main, container, false);
    ButterKnife.inject(this, rootView);
    return view;
}

我想知道如何在我的测试中使用 Butterknife 来减少我的样板视图代码,就像我在生产代码中所做的那样。

【问题讨论】:

  • 如果你从来没有得到解决方案,我最终只使用此代码 - stackoverflow.com/a/40496729/2480714 来获取 Activity,然后使用标准 findViewById(R.id.my_view) 代码对自定义视图执行操作。

标签: android android-fragments android-espresso butterknife


【解决方案1】:

是的,你可以。

供参考:http://jakewharton.github.io/butterknife/javadoc/butterknife/ButterKnife.html

在测试依赖项中包含 ButterKnife。

ButterKnife.inject() 的第一个参数是“目标”,即带有 @InjectView 注释字段的类的实例,第二个参数是包含要注入的视图的 Activity、View 或 Dialog。

类似这样的:

public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> {

private MainActivity mMainActivity;
@InjectView(R.id.buttonLearn)
Button learnButton;

@InjectView(R.id.buttonTeach)
Button teachButton;

@SuppressWarnings( "deprecation" )
public MainActivityTest() {
    super("com.example.application.app", MainActivity.class);
}

protected void setUp() throws Exception {
 super.setUp();

  mMainActivity = getActivity();
  ButterKnife.inject(this, mMainActivity );
}

【讨论】:

  • 这对我不起作用。每次我尝试访问任何视图时都会得到 NPE。我试过ButterKnife.inject(this, activity);ButterKnife.inject(this, fragment.getView())
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多