Как получить контекст и активность MainActivity в тестовых случаях JUnit на Android? - PullRequest
0 голосов
/ 30 сентября 2018

Я создаю простое приложение для викторины, в котором пользователь отвечает на пять вопросов, и результат отображается на экране.В моей MainActivity я вызываю конструктор класса questionsMethods с параметрами context и activity.

Мой вопрос: как получить контекст и активность MainActivity в тестовом классе JUnit?Мне это нужно, потому что методы в методах вопросов используют контекст и действие.

Часть кода: MainActivity:

    public class MainActivity extends AppCompatActivity {
        questionsMethods myQuestionMethods = new questionsMethods(this, this);
        private String[] questionArray = new String[30]; // Holds text file
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            AssetManager assetManager = getAssets();

            myQuestionMethods.readWriteFile("listofquestions.txt", questionArray); // Reads from text file into array

questionsMethods:

public class questionsMethods {
private Context mContext;
    private Activity mActivity;
    private int localCounterForCurrQuestionCount = 1;
    private String[] localQuestionsArray = new String[30];     

    public questionsMethods(Context context, Activity activity) {
        mContext = context;
        mActivity = activity;
    }

public void readWriteFile(String fileName, String[] questionArray) {
    int count = 0; // Holds count of array index in which a line is stored
    try {
        String nextLine;
        InputStream is = mContext.getAssets().open(fileName); // Retrieves and opens fileName
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
        while ((nextLine = bufferedReader.readLine()) != null) { // Check if line incrementer reaches the end
            questionArray[count] = nextLine;
            count++;
        }
    } catch (java.io.IOException ex) {
        Log.i("Error", "Cannot read file");
        System.exit(1);
    }
    localQuestionsArray = questionArray;
}

1 Ответ

0 голосов
/ 25 октября 2018

Используйте Robolectric, однако ваш код очень сложно протестировать.Класс QuestionMethods отвечает только за бизнес-логику и не должен зависеть от Android.

Так что если вы хотите сделать свой код чище и хотите правильно протестировать QuestionMethods, Robolectric не следует использовать для классовкоторые отвечают за бизнес-логику.

...