Я создал приложение, которое позволяет пользователям создавать транзакции. Когда эта транзакция создается, она добавляется в базу данных (База данных Firebase Realtime). После создания транзакции необходимо выполнить серию согласований, прежде чем она будет выполнена.
Чтобы одобрить транзакцию, пользователь должен щелкнуть транзакцию на странице запросов транзакций, на которой отображаются требуемые транзакции. Когда пользователь нажимает на эту транзакцию, ему отображается соответствующее диалоговое окно. Когда пользователь нажимает кнопку «одобрить» в этом диалоговом окне, значение соответствующего «флага» в базе данных устанавливается равным true.
Я пытаюсь написать тест, используя Mockito, чтобы проверить, что этот флаг действительно установлен в true, но я изо всех сил пытаюсь это сделать. Я просмотрел несколько видеороликов о модульном тестировании в Android Studio на YouTube и прочитал все посты, посвященные модульному тестированию Firebase в Android Studio, но все еще не смог выполнить желаемый тест.
Поскольку мои исследования привели меня в тупик, я надеялся, что кто-то здесь может либо направить меня в правильном направлении к некоторому образцу кода, который я еще не видел, либо, что еще лучше, помочь мне написать желаемый тест.
Код, который я пытаюсь проверить, находится в этом классе:
public class Request extends AppCompatActivity {
private static final String TAG = "Request";
//Firebase Stuff
FirebaseDatabase database;
DatabaseReference start, ref;
DatabaseReference user;
RecyclerView recycler_menu;
RecyclerView.LayoutManager layoutManager;
Dialog custDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_request);
final String passedEmail = getIntent().getStringExtra("Email");
//Init Firebase
database = FirebaseDatabase.getInstance();
start = database.getReference("Transaction");
ref = database.getReference("User");
//Load Menu
recycler_menu = findViewById(R.id.recycler_menu);
recycler_menu.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
recycler_menu.setLayoutManager(layoutManager);
loadMenu();
}
private void loadMenu() {
FirebaseRecyclerAdapter<Transaction, TransRequestHolder> adapter = new FirebaseRecyclerAdapter<Transaction, TransRequestHolder>(Transaction.class, R.layout.trans_item, TransRequestHolder.class, start) {
@Override
protected void populateViewHolder(TransRequestHolder viewHolder, final Transaction model, int position) {
final String passedUserType= getIntent().getStringExtra("userType");
final String passedEmail= getIntent().getStringExtra("Email");
final String receiver = model.getReceiver().replace('.', ' ');
final String shopA = model.getShopA().replace('.', ' ');
//custB
if(passedEmail.equalsIgnoreCase(model.getReceiver()) && model.getCustflag() == false) {
viewHolder.txtTransactionA.setText(model.getAmount());
viewHolder.txtTransactionC.setText(model.getCurrency());
viewHolder.txtTransactionR.setText(model.getReceiver());
final Transaction clickItem = model;
viewHolder.setItemClickListener(new ItemClickListener() {
@Override
public void onClick(android.view.View view, int position, boolean isLongClick) {
Toast.makeText(Request.this, "Receiving: " + shopA, Toast.LENGTH_SHORT).show();
final String key = model.getKey();
custDialog = new Dialog(Request.this);
custDialog.setContentView(R.layout.dialog_template);
final EditText Write = custDialog.findViewById((R.id.write));
Button Approve = custDialog.findViewById(R.id.approve);
Write.setEnabled(true);
Approve.setEnabled(true);
Approve.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String newShopB = Write.getText().toString().replace(".", " ");
start.child(key).child("custflag").setValue(true);
start.child(key).child("shopB").setValue(newShopB);
Toast.makeText(Request.this, "CustB Approval", Toast.LENGTH_SHORT).show();
custDialog.cancel();
}
});
custDialog.show();
}
});
}
//shopA
else if (passedEmail.equalsIgnoreCase(model.getShopA()) && (model.getCustflag() == true && model.getShopAflag() == false)) {
viewHolder.txtTransactionA.setText(model.getAmount());
viewHolder.txtTransactionC.setText(model.getCurrency());
viewHolder.txtTransactionR.setText(model.getReceiver());
final Transaction clickItem = model;
viewHolder.setItemClickListener(new ItemClickListener() {
@Override
public void onClick(android.view.View view, int position, boolean isLongClick) {
Toast.makeText(Request.this, "Receiving: " + shopA, Toast.LENGTH_SHORT).show();
final String key = model.getKey();
//Dialog option number one
customDialog("Transaction Approval", "Are you sure you want to approve this transaction?", "cancel", "okMethod2", passedEmail, key);
}
});
}
//shopB
else if (passedEmail.equalsIgnoreCase(model.getShopB()) && (model.getShopAflag() == true && model.getShopBflag() == false)) {
viewHolder.txtTransactionA.setText(model.getAmount());
viewHolder.txtTransactionC.setText(model.getCurrency());
viewHolder.txtTransactionR.setText(model.getReceiver());
final Transaction clickItem = model;
viewHolder.setItemClickListener(new ItemClickListener() {
@Override
public void onClick(android.view.View view, int position, boolean isLongClick) {
Toast.makeText(Request.this, "Receiving: " + shopA, Toast.LENGTH_SHORT).show();
final String key = model.getKey();
//Dialog option number one
customDialog("Transaction Approval", "Are you sure you want to approve this transaction?", "cancel", "okMethod3", passedEmail, key);
}
});
}
else {
viewHolder.itemView.setVisibility(View.GONE);
}
}
};
recycler_menu.setAdapter(adapter);
}
}
Я надеюсь, что предоставил достаточно информации. Я был бы признателен за любую помощь, которую мне может оказать.