2014-02-23 35 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

相關問題