Android 单元测试阵列列表
在我的应用程序中,我将XML文件的内容解析为两个数组。在我的单元测试中,如何从被测试的活动中获取这些ArrayList,以便测试它们的长度和内容是否正确?使用我目前使用的方法,数组总是空的,尽管我知道解析工作正常。在测试活动的onCreate方法中调用解析方法Android 单元测试阵列列表,android,junit,robolectric,Android,Junit,Robolectric,在我的应用程序中,我将XML文件的内容解析为两个数组。在我的单元测试中,如何从被测试的活动中获取这些ArrayList,以便测试它们的长度和内容是否正确?使用我目前使用的方法,数组总是空的,尽管我知道解析工作正常。在测试活动的onCreate方法中调用解析方法 @RunWith(RobolectricTestRunner.class) public class TroubleShooterActivityTest { private TroubleShooterActivity mActivi
@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);
}
来自故障诊断与排除活动的代码
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
}
}
我会检查在catchException e期间是否有异常被捕获并隐藏到您的Toast呼叫中。我不确定Robolectric是否完全初始化了您的资源,以便您可以进行此调用:getResources.openRawResource
如果您想隔离XML解析代码,并对其进行测试和结果,则可以考虑将解析代码从活动中移入其自己的类。这样,您甚至不必利用robolectric来运行测试
作为旁注,您确定static是变量的适当修饰符吗?我认为在这种情况下,非静态应该可以正常工作 如果它们是静态的,并且由onCreate填充,那么它们应该具有值,但不知道如何提供帮助。他们以前住在@吗?不过,我不喜欢你在设置中做所有工作的方式;在我看来,测试应该针对实例运行,安装程序应该做的就是实例化并调用onCreate。是的,它们是静态的,由onCreate填充。我正在学习Android活动测试教程,它完成了设置中的所有工作。看起来TroubleShooterActivity真的返回空值。我们需要一些疑难解答活动代码来帮助您。我已经添加了相关的疑难解答活动代码。解析是在问题活动依赖于它时进行的,这很好。