android - Android Activity 的 Junit 测试

标签 android testing

有没有人有使用 Android Studio 在 java 中为 On Create 和 OnClick 方法创建单元测试的经验?我使用来自 Firebasedatabase 的数据。 我想我必须使用 Mock-object,但我不知道从哪里开始。

下面是我类(class) LoginActivity 的代码

public class LoginActivity extends AppCompatActivity implements View.OnClickListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        mfireBaseAuth = FirebaseAuth.getInstance();
        mDatabase = FirebaseDatabase.getInstance().getReference();
        mProgressDialog = new ProgressDialog(this);
        editTextEmail = (EditText) findViewById(R.id.editTextEmail);
        editTextPassword = (EditText) findViewById(R.id.editTextPassword);
        buttonSignIn = (Button) findViewById(R.id.buttonSignIn);
        textViewSignUp = (TextView) findViewById(R.id.textViewSignUp);

        buttonSignIn.setOnClickListener(this);
        textViewSignUp.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        if(v == buttonSignIn){
            usersignin();

        }
        if(v==textViewSignUp){
            startActivity(new Intent(this, RegisterActivity.class));
        }
       }

    private void usersignin() {
        String email = editTextEmail.getText().toString().trim();
        String password = editTextPassword.getText().toString().trim();

        if(TextUtils.isEmpty(email)){
            Toast.makeText(this, "Please enter Email", Toast.LENGTH_SHORT).show();
            return;
        }

        if(TextUtils.isEmpty(password)){
            Toast.makeText(this, "Please enter password", Toast.LENGTH_SHORT).show();
            return;
        }

        mProgressDialog.setMessage("Logging in. Please wait...");
        mProgressDialog.show();
        mfireBaseAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                mProgressDialog.dismiss();
                if(task.isSuccessful()){
                    getSignedInUserProfile();
                }
            }
        });
    }

    private void getSignedInUserProfile() {

        DatabaseReference reference = mDatabase;//.child("eduback-2feef");
        firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
        userID = firebaseUser.getUid();
        reference.child("Users").child(userID).child("User info").addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                User user = dataSnapshot.getValue(User.class);
                if(user != null) {
                    // Save if the user is student or prof in shared prefs.
                    PreferenceHelper helper = new PreferenceHelper(getBaseContext());
                    helper.setIsStudent(user.isStudent);
                    checkStudentOrProfessor(user);
                }

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                // Ups vis error
            }
        });



    }

    private void checkStudentOrProfessor(User user) {

        Intent i;
        if (user.isStudent ) {
            i = new Intent(this, MainActivityStudent.class);
        } else {
            i = new Intent(this, MainActivityProfessor.class);
        }
        startActivity(i);


    }



}

最佳答案

Java 的 Mockito 模拟框架提供与 Android 单元测试的兼容性。

您可以将模拟对象配置为在调用时返回一些特定值。

您不需要测试 Firebasedatabass。

但是你必须为你的 View 制作 Firebasedatabase 包装器类

包装类必须包含变量(userID,user.isStudent)

关于android - Android Activity 的 Junit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43142107/

相关文章:

testing - 测试条件与测试场景(相同还是不同?)

javascript - 使用 JavaScript 的原生 Android DatePicker

java - 如何从 android 中的 firebase 获取随 secret 钥?

testing - TestCafe Runner - 是否可以将常量从 createRunner 文件传递​​给测试

ruby-on-rails - Ruby on Rails的奇怪事件

testing - Hamcrest 1.2 有什么新内容?

android - 有没有人成功地用 Lion 构建了 Android 模拟器?

java - 安卓内存问题

android - 如果用户取消了 Android In App 订阅,有什么方法可以检索

http - 在创建改变服务器上数据的接口(interface)时,下列哪一项是正确的?