1

私のアプリケーションでは、XML ファイルの内容を 2 つの配列に解析します。私の単体テストでは、テスト対象のアクティビティからこれらの ArrayLists を取得して、たとえば正しい長さと内容が正しいことをテストするにはどうすればよいですか? 現在使用している方法では、解析が正しく機能していることはわかっていますが、配列は常に null です。(解析メソッドは、テスト中のアクティビティの onCreate() メソッドで呼び出されます。)

@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
    }
}
4

1 に答える 1

0

catch(Exception e) 中に例外がキャッチされて Toast 呼び出しに隠されているかどうかを確認します。次の呼び出しを行うことができるように、Robolectric がリソースを完全に初期化するかどうかはわかりません: getResources().openRawResource()

xml 解析コードを分離し、それとその結果を完全にテストする場合は、解析コードを Activity から独自のクラスに移動することを検討してください。この方法では、テストを実行するために robolectric を活用する必要さえありません。

補足として、 static が変数の適切な修飾子であると確信していますか? この場合、非静的は問題なく機能するはずです。

于 2012-03-01T20:33:58.380 に答える