1
在我的應用程序中,我將XML文件的內容解析爲兩個數組。在我的單元測試中,如何從測試活動中獲取這些ArrayLists,以便我可以測試它們是否正確,例如正確的長度和內容是否正確?我現在使用的方法數組總是空,儘管我知道解析工作正常。 (解析方法稱爲被測活動的onCreate()方法。)單元測試ArrayList
@RunWith(RobolectricTestRunner.class)
public class TroubleShooterActivityTest {
private TroubleShooterActivity mActivity;
private Button mButton;
private TextView mTextView;
private ImageView mLogo;
private ArrayList<Page> mPageList;
private ArrayList<Answer> mAnswerList;
private int lengthPageArray = 7;
private int lengthAnswerArray = 7;
@Before
public void setUp() throws Exception {
mActivity = new TroubleShooterActivity();
mActivity.onCreate(null);
mButton = (Button) mActivity.findViewById(R.id.troubleShooter);
mTextView = (TextView) mActivity.findViewById(R.id.title);
mLogo = (ImageView) mActivity.findViewById(R.id.IntegralLogo);
mPageList = TroubleShooterActivity.pageList;
mAnswerList = TroubleShooterActivity.answerList;
}
@Test
public void testPreconditions() {
assertNotNull(mTextView);
assertNotNull(mLogo);
assertNotNull(mButton);
assertNotNull(mPageList);
assertNotNull(mAnswerList);
}
@Test
public void testArraysWereFilledCorrectly(){
assertEquals(mPageList.size(), lengthPageArray);
assertEquals(mAnswerList.size(), lengthAnswerArray);
}
從TroubleShooterActivity
public class TroubleShooterActivity extends OptionMenu {
/**Variables */
static ArrayList<Page> pageList;
static ArrayList<Answer> answerList;
/** onCreate() is called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
parseXML();
Button Select = (Button) findViewById(R.id.troubleShooter);
/** assign behaviour to button*/
Select.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
Intent intent = new Intent(TroubleShooterActivity.this, Question.class);
intent.putExtra("NextPageID", 1); //Pass next page ID to Question class
startActivity(intent);
}
});
}
public void parseXML(){
try {
/** Try handling XML */
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader xmlreader = parser.getXMLReader();
/**Gets the input from the XML file stored in the res raw folder */
InputSource is = new InputSource(getResources().openRawResource(R.raw.trouble_shooter_content));
XMLHandler xmlHandler = new XMLHandler();
/** assign our handler */
xmlreader.setContentHandler(xmlHandler);
xmlreader.parse(new InputSource(is.getByteStream()));
pageList = XMLHandler.pageList;
answerList = XMLHandler.answerList;
} catch (Exception e) {
Toast.makeText(getApplicationContext(), e.getClass().getName() + " " + e.getMessage(), Toast.LENGTH_LONG).show();
//Let the user know about the error
}
}
不知道如何提供幫助 - 如果它們是靜態的,並且由'onCreate()'填充,它們應該有值。他們在'@之前'嗎?儘管如此,我不喜歡你在'setUp'中完成所有工作的方式;海事組織的測試應該針對實例運行,並且所有的設置都應該實例化並調用onCreate。 – 2012-03-01 17:36:01
是的,它們是靜態的,並由onCreate()填充。我正在關注Android Activity測試教程,它可以完成setUp中的所有工作。 – user 2012-03-01 19:44:52
它看起來像TroubleShooterActivity真的返回null。我們需要一些TroubleShooterActivity的代碼來幫助你。 – 2012-03-01 20:07:31