Ich habe viele Artikel gelesen und versucht, einen Komponententest mit Roboelectric zu starten, aber ich bekomme es immer noch nicht und bin nicht in der Lage, einen einfachen Komponententest zu schreiben. Kann mir jemand sagen, was zu verwenden und wie zu starten, da Unit-Tests in Android nicht einfach ist.Android Unit Test Start
Antwort
verwenden Robotium nächsten Schritte folgen:
1.- Import Robotium - Build.gradle:
dependencies {
....
testCompile 'junit:junit:4.12'
.....
compile 'com.jayway.android.robotium:robotium-solo:5.6.0'
compile 'com.android.support:support-annotations:23.0.0'
.....
}
2.- eine Abtract Klasse Erstellen Sie Ihren Test innerhalb androidTest Paket zu initialisieren:
import android.app.Activity;
import android.test.ActivityInstrumentationTestCase2;
import com.robotium.solo.Solo;
public abstract class AbstractSystemTestBase<T extends Activity> extends ActivityInstrumentationTestCase2<T> {
public static final int WAIT_FOR_ACTIVITY_TIMEOUT = 30000;
public static final int WAIT_FOR_DIALOG_TIMEOUT = 30000;
public static final int WAIT_FOR_VIEW_TIMEOUT = 6000;
public static final int WAIT_FOR_TEXT_TIMEOUT = 6000;
public static final int STANDARD_WAIT_TIME = 30000;
public static final int SHORT_WAIT_TIME = 5000;
protected Solo solo;
public AbstractSystemTestBase(Class<T> activityClass) {
super(activityClass);
}
@Override
public void setUp() throws Exception {
super.setUp();
solo = new Solo(getInstrumentation(), getActivity());
}
@Override
public void tearDown() throws Exception {
super.tearDown();
solo.finishOpenedActivities();
}
}
3.- Erstellen Sie Ihre Testklasse, die abstrakte Klasse (in androidTest-Paket) erweitern:
public class TestMainMenu extends AbstractSystemTestBase<MainMenuActivity> {
public TestMainMenu() {
super(MainMenuActivity.class);
}
public void testMenu() throws InterruptedException {
assertTrue("MainMenu Activity never started", solo.waitForActivity(MainMenuActivity.class, WAIT_FOR_ACTIVITY_TIMEOUT));
//YOUR TESTS HERE
//EXAMPLE:
View view = solo.getView("main_menu_activity_iv_go_activity_one");
solo.clickOnView(view);
assertTrue("Activity one never started", solo.waitForActivity(Activity1.class, WAIT_FOR_ACTIVITY_TIMEOUT));
}
}
4.- Führen Sie Ihren Test aus. Rechtsklick auf Ihre Testklasse
Können Sie bitte ein Beispiel geben, wie eine Methode zu testen, die ich in einer bestimmten Klasse geschrieben? –
Abhängig von der Methode. In einem Szenario, in dem Sie eine Math-Klasse mit einer Divide-Methode haben, funktioniert dieser Code: SimpleMath mSimpleMath = new SimpleMath(); int Ergebnis = mSimpleMath.divide (4,2); assertTrue ("Ergebnis fehlgeschlagen!", Ergebnis == 2); Obwohl ich denke, ist besser mit JUnit für diese Art von Szenario –
auf eine Sortiermethode, die einige Parameter und ein Objekt zurückgibt. Ich meine, wie beziehe ich mich von dem Test auf die angegebene Methode, die ich testen möchte –
Ich hatte auch das gleiche Problem wie zuvor ich das Modul für die Unit-Tests im Android gegeben wurde. Dies ist das einfache Beispiel, das Ihnen helfen könnte. Ich habe mein Bestes getan, um Ihnen zu helfen. Sie können einfach die EmailValidatorTest-Klasse ausführen, um die Testergebnisse zu sehen. Für assert (JUnit) können Sie Assert folgen. Dies ist XML.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F0F0F0"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="@string/lbl_register"
android:textAllCaps="true"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#176CEC"
android:textStyle="bold" />
<EditText
android:id="@+id/editText_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#fff"
android:ems="10"
android:hint="@string/lbl_email_hint"
android:inputType="textEmailAddress"
android:padding="12dp" />
<EditText
android:id="@+id/editText_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:background="#fff"
android:ems="10"
android:hint="@string/lbl_password_hint"
android:inputType="textPassword"
android:padding="12dp" />
<Button
android:id="@+id/btn_signup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:background="#176CEC"
android:text="@string/lbl_btn_signup"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#fff"
android:textStyle="bold" />
Das ist mein MainActivity
package com.example.hassidiczaddic.unittesting;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.hassidiczaddic.unittesting.R;
public class MainActivity extends Activity {
private EditText emailEditText;
private EditText passEditText;
private Button btnsignup;
private EmailValidator mEmailValidator;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
emailEditText = (EditText) findViewById(R.id.editText_email);
passEditText = (EditText) findViewById(R.id.editText_password);
// Setup field validators.
mEmailValidator = new EmailValidator();
emailEditText.addTextChangedListener(mEmailValidator);
passEditText.addTextChangedListener(mEmailValidator);
btnsignup=(Button)findViewById(R.id.btn_signup);
btnsignup.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Don't save if the fields do not validate.
if (!mEmailValidator.isValid()) {
emailEditText.setError("Invalid email or Password");
Log.w("TAG", "Invalid email");
return;
}else
Toast.makeText(MainActivity.this,"Satrun is dead",Toast.LENGTH_SHORT).show();
}
});
}
}
Das ist mein EmailValidator Klasse ist
package com.example.hassidiczaddic.unittesting;
import android.app.Activity;
import android.text.Editable;
import android.text.TextWatcher;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EmailValidator implements TextWatcher {
/**
* Email validation pattern.
*/
// validating email id
public static final Pattern EMAIL_PATTERN = Pattern.compile(
"[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" +
"\\@" +
"[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" +
"(" +
"\\." +
"[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" +
")+"
);
// validating password with retype password
private boolean isValidPassword(String pass) {
if (pass != null && pass.length() > 6) {
return true;
}
return false;
}
private boolean mIsValid = false;
public boolean isValid() {
return mIsValid;
}
public static boolean isValidEmail(CharSequence email) {
return email != null && EMAIL_PATTERN.matcher(email).matches();
}
public static boolean isValidPassword(CharSequence pass) {
return pass != null && isValidPassword(pass);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable editableText) {
mIsValid=isValidEmail(editableText);
mIsValid=isValidPassword(editableText);
}
}
Das ist mein Unittesting In android:
package com.example.hassidiczaddic.unittesting;
import android.test.suitebuilder.annotation.SmallTest;
import org.junit.Test;
import static org.junit.Assert.*;
@SmallTest
public class EmailValidatorTest {
@Test
public void emailValidator_CorrectEmailSimple_ReturnsTrue() {
assertTrue(EmailValidator.isValidEmail("[email protected]"));
}
@Test
public void emailValidator_CorrectEmailSubDomain_ReturnsTrue() {
assertTrue(EmailValidator.isValidEmail("[email protected]"));
}
@Test
public void emailValidator_InvalidEmailNoTld_ReturnsFalse() {
assertFalse(EmailValidator.isValidEmail("[email protected]"));
}
@Test
public void emailValidator_InvalidEmailDoubleDot_ReturnsFalse() {
assertFalse(EmailValidator.isValidEmail("[email protected]"));
}
@Test
public void emailValidator_InvalidEmailNoUsername_ReturnsFalse() {
assertFalse(EmailValidator.isValidEmail("@email.com"));
}
@Test
public void emailValidator_EmptyString_ReturnsFalse() {
assertFalse(EmailValidator.isValidEmail(""));
}
@Test
public void emailValidator_NullEmail_ReturnsFalse() {
assertFalse(EmailValidator.isValidEmail(null));
}
@Test
public void passwordValidator_NullPassword_ReturnsFalse(){
assertFalse(EmailValidator.isValidPassword(null));
//other testcases for passwords
}}
Vergessen Sie nicht, Ihre Gradle SYC mit:
// Required -- JUnit 4 framework
testCompile 'junit:junit:4.12'
danke ich habe deine Antwort gewählt –
Es war mir eine Freude, Ihnen zu helfen. Ich hatte ein ähnliches Problem wie Ihres und fand die Lösung nirgends. Ich werde jederzeit helfen, wenn ich mich mit den Themen auskenne. Wenn du glaubst, dass dir das geholfen hat zu verstehen, dann bitte die Antwort als richtig markieren. :) :) – Niroj
Hallo vielen Dank für Ihre Bemühungen, aber ich habe bereits die Antwort angenommen, bevor Ihre Antwort, so kann ich nur Ihre Stimme abstimmen –
- 1. android unit test spannablestringbuilder
- 2. Unit-Test mit Android Volley
- 3. Android Unit-Test nicht spotten
- 4. Android Studio Unit-Test SQLiteDataBase ist null
- 5. Was zum Unit-Test, in Android-Apps
- 6. Ausgabe mit Realm Unit Test auf Android
- 7. Locale während Unit Test auf Android
- 8. android.util.Patterns Unit-Test liefert Nullpointer
- 9. Wie Unit Test JSON Parsing
- 10. Unit Test Sockets
- 11. Unit Test Geruch
- 12. Unit-Test mit mockresourcerequest
- 13. Unit Test mathematischen Code
- 14. AngularJS Controller Unit Test
- 15. AngularJS Unit Test Fehlerabhängigkeit
- 16. Spring Unit-Test
- 17. Unit-Test mit NSURLConnection
- 18. Unit-Test-Maven-Plugins
- 19. Unit-Test SessionScoped Klasse
- 20. Ruby Test :: Unit Befehlszeilenoptionen?
- 21. Unit Test Graphics
- 22. QT: simulierter Unit-Test
- 23. Unit-Test JSON Swift
- 24. AngularJs Unit Test Speicherlecks
- 25. Unit-Test verschiedene Flagwerten
- 26. docker unit test setup
- 27. Unit-Test LinqToSqlDomainService
- 28. Unit-Test-3-mal
- 29. Unit-Test Sicherheitsmodell ClickOnce
- 30. Unit-Test RedirectToRouteResult
Haben Sie ihre Website Tutorial überprüft? – Lawrance
https://developer.android.com/training/testing/start/index.html –
@Lawrance ja, ich habe die Website-Tutorials überprüft und bin immer noch nicht in der Lage, eine klare Idee zu haben –