Mobile App Testing

by secondsky88378361314fMIT227 starsListed Oct 8, 2026Updated Oct 8, 2026Repository updated 10 days ago

Mobile app testing with unit tests, UI automation, performance testing. Use for test infrastructure, E2E tests, testing standards, or encountering test framework setup, device farms, flaky tests, platform-specific test errors.

Instructions onlySoftware Development
AI-generated overview

Guidance for implementing mobile app testing strategies across unit, integration and E2E levels.

What it does
Provides a testing-pyramid reference for mobile applications, mapping unit, integration and E2E levels to tools such as Jest, XCTest, JUnit, Detox, Espresso and Appium. It includes example test snippets for React Native, iOS and Android, plus best practices and anti-patterns. It is an instructions-only reference and produces no files or scripts.
When to use it
Use when setting up or standardizing mobile test infrastructure, writing unit, UI automation or E2E tests, or troubleshooting test framework setup, device farms, flaky tests and platform-specific test errors.
Requirements
No tools, packages or credentials are required; it is instructions-only and ships no scripts. The example snippets reference Jest, Detox, XCTest, Espresso and Appium, which the user would need in their own project.

Mobile App Testing

Implement comprehensive testing strategies for mobile applications.

Testing Pyramid

LevelToolsCoverage
UnitJest, XCTest, JUnit70%
IntegrationDetox, Espresso20%
E2EAppium, Detox10%

React Native (Jest + Detox)

javascript
// Unit testdescribe('CartService', () => {  it('calculates total correctly', () => {    const cart = new CartService();    cart.addItem({ price: 10, quantity: 2 });    expect(cart.getTotal()).toBe(20);  });});
// E2E test (Detox)describe('Login flow', () => {  beforeEach(async () => {    await device.reloadReactNative();  });
  it('should login successfully', async () => {    await element(by.id('email-input')).typeText('[email protected]');    await element(by.id('password-input')).typeText('password123');    await element(by.id('login-button')).tap();    await expect(element(by.id('dashboard'))).toBeVisible();  });});

iOS (XCTest)

swift
func testLoginSuccess() {    let app = XCUIApplication()    app.launch()
    app.textFields["email"].tap()    app.textFields["email"].typeText("[email protected]")    app.secureTextFields["password"].typeText("password123")    app.buttons["Login"].tap()
    XCTAssertTrue(app.staticTexts["Welcome"].exists)}

Android (Espresso)

kotlin
@Testfun loginSuccess() {    onView(withId(R.id.email)).perform(typeText("[email protected]"))    onView(withId(R.id.password)).perform(typeText("password123"))    onView(withId(R.id.loginButton)).perform(click())    onView(withId(R.id.dashboard)).check(matches(isDisplayed()))}

Best Practices

  • Test business logic first (unit tests)
  • Mock external dependencies
  • Test both success and failure paths
  • Automate critical user flows
  • Maintain >80% code coverage
  • Test on real devices periodically

Avoid

  • Testing implementation details
  • Hardcoded test data
  • Interdependent tests
  • Skipping error case testing

Source and attribution

Source:secondsky/claude-skillsinplugins/mobile-app-testing/skills/mobile-app-testingat commit8837836

License: MIT

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal