Как протестировать статические методы в Android JUNIT тестами

public class FirebaseServer {


    public static final String TAG = FirebaseServer.class.getSimpleName();

    private static FirebaseAuth mAuth = FirebaseAuth.getInstance();

    public static void registerNewUser(String email, String password, FirebaseRegisterListener listener){
        mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if(task.isSuccessful()){
                    Log.e(TAG,"register new user success");
                    listener.onRegisterSuccess(task.getResult());
                }else {
                    Log.e(TAG,"register new user failure");
                    listener.onRegisterFailure(task.getException().toString());
                }
            }
        });
    }

    public static void signIn(String email, String password, FirebaseSignInListener listener){
        mAuth.signInWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if(task.isSuccessful()){
                    Log.e(TAG,"SignIn in Firebase is successful");
                    listener.signInSuccess(task.getResult());
                }else {
                    Log.e(TAG,"SignIn in Firebase is failure");
                    listener.signInFailure(task.getException().toString());
                }
            }
        });
    }
}

Ответы (1 шт):

Автор решения: Sergei Buvaka

Ну особо никак.

Вы можете протестировать работу каких-то входных сущностей типа FirebaseSignInListener, но вы не сможете протестировать. У вас создание объекта находится внутри самого класса, а не передается извне. Соответственно вы не можете замокать FirebaseAuth.

Для того, чтоб можно было корректно протестировать этот класс вам стоит его отрефакторить. Сделать зависимости, которые будут передаваться извне. Возможно вообще сделать методы нестатичными.

В противном случае вы либо не сможете его протестировать, либо будете лепить дикие костыли, которые не факт, что еще будет корректно тестить.

→ Ссылка