2014-02-23 26 views
6

是否可以使用Butterknife为测试类注入视图?视图被注入到由MainActivity类创建并提交的片段中。是否有可能使用Butterknife在Android中注入espresso Test clases中的视图?

这里是我的测试类的代码:

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来在我的测试中减少我的样板代码,就像我在生产代码中一样。

回答

2

是的,你可以。

参考: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); 
} 
+0

这并不为我工作。每次尝试访问任何视图时,我都会得到NPE。我尝试过'ButterKnife.inject(this,activity);'和'ButterKnife.inject(this,fragment.getView())'。 – psyren89

相关问题