Можно ли использовать Butterknife для ввода представлений в тестовые классы эспрессо в Android?

Можно ли использовать 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, чтобы уменьшить шаблонный код представления в своих тестах, точно так же, как я сделал это в своем производственном коде.


person Andre Perkins    schedule 23.02.2014    source источник
comment
Если у вас никогда не было решения для этого, я просто использовал этот код - stackoverflow.com/a/40496729/2480714 чтобы получить действие, а затем стандартный код findViewById(R.id.my_view) для выполнения действий с пользовательским представлением.   -  person PGMacDesign    schedule 11.03.2019


Ответы (1)


Да, ты можешь.

Для справки: http://jakewharton.github.io/butterknife/javadoc/butterknife/ButterKnife.html

Включите ButterKnife в свои тестовые зависимости.

Первый аргумент ButterKnife.inject() — это «цель», т. е. экземпляр класса с аннотированными полями @InjectView, а второй аргумент — это действие, представление или диалоговое окно, содержащее представления для внедрения.

Что-то вроде этого:

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 );
}
person yogurtearl    schedule 07.08.2014
comment
Это не работает для меня. Я получаю NPE каждый раз, когда пытаюсь получить доступ к любому из представлений. Я пробовал ButterKnife.inject(this, activity); и ButterKnife.inject(this, fragment.getView()). - person psyren89; 30.10.2014