Tillitsdone
down Scroll to discover

Mock Dio Requests for Flutter Unit Testing

Learn how to effectively mock Dio HTTP requests in Flutter for reliable unit testing.

Discover best practices, code examples, and practical implementation techniques for testing network calls.
thumbnail

Testing Network Requests in Flutter: A Guide to Mocking Dio

A modern abstract architectural structure with flowing curves and glass panels dominated by bright azure blue and gleaming metallic silver photographed from a low upward angle against a clear sky high-quality ultra-realistic cinematic 8K UHD high resolution sharp and detail

In the world of Flutter development, handling and testing network requests is a crucial skill. While Dio is an excellent HTTP client for making API calls, testing these network interactions can be challenging. Today, let’s explore how to effectively mock Dio requests for unit testing in Flutter.

Understanding the Importance of Mocking

When writing unit tests, we want them to be fast, reliable, and independent of external services. Making actual network calls during tests can lead to flaky tests and slower execution times. This is where mocking comes in handy.

Geometric abstract composition with intersecting planes and light beams featuring stone blue concrete gray and deep black colors captured from a straight-on perspective with strong directional lighting high-quality ultra-realistic cinematic 8K UHD high resolution sharp and detail

Setting Up Your Testing Environment

First, let’s set up our testing environment with the necessary dependencies. Add these to your pubspec.yaml:

dev_dependencies:
mockito: ^5.4.0
http_mock_adapter: ^0.4.4

Creating Mock Responses

Let’s look at a practical example of how to mock Dio requests. We’ll create a simple user service and test it:

class UserService {
final Dio dio;
UserService(this.dio);
Future<User> getUser(int id) async {
final response = await dio.get('/users/$id');
return User.fromJson(response.data);
}
}

Here’s how we can test this service:

void main() {
late Dio dio;
late UserService userService;
late DioAdapter dioAdapter;
setUp(() {
dio = Dio();
dioAdapter = DioAdapter(dio: dio);
dio.httpClientAdapter = dioAdapter;
userService = UserService(dio);
});
test('should return user when API call is successful', () async {
final mockData = {
'id': 1,
'name': 'John Doe',
'email': 'john@example.com'
};
dioAdapter.onGet(
'/users/1',
(server) => server.reply(200, mockData),
);
final user = await userService.getUser(1);
expect(user.name, equals('John Doe'));
expect(user.email, equals('john@example.com'));
});
}

Elegant flowing curves of walnut and iron materials intertwined in an abstract form with warm umber highlights photographed from a diagonal elevated angle high-quality ultra-realistic cinematic 8K UHD high resolution sharp and detail

Best Practices for Mocking Dio

  1. Always mock error scenarios
  2. Test different HTTP methods
  3. Verify request headers and parameters
  4. Test timeout scenarios
  5. Mock interceptors when needed

Here’s an example of testing an error scenario:

test('should throw exception when API call fails', () async {
dioAdapter.onGet(
'/users/1',
(server) => server.throws(
404,
DioError(
requestOptions: RequestOptions(path: '/users/1'),
response: Response(
statusCode: 404,
requestOptions: RequestOptions(path: '/users/1'),
),
),
),
);
expect(
() => userService.getUser(1),
throwsA(isA<DioError>()),
);
});

Conclusion

Mocking Dio requests is essential for writing reliable unit tests in Flutter. By following these patterns and best practices, you can ensure your network-related code is thoroughly tested and maintainable.

Minimalist architectural installation with clean lines and geometric shapes featuring bright seaweed green and maroon accents against light stone surfaces viewed from a bird's eye perspective high-quality ultra-realistic cinematic 8K UHD high resolution sharp and detail

icons/logo-tid.svg Latest Blogs
Discover our top articles, selected to support the growth of your business.
https://imgproxy-landing-page.tillitsdone.com/sig/rs:fit:1200:630/plain/https%3A%2F%2Fcms-r2.tillitsdone.com%2Fwp-content-prod%2Fuploads%2F2025%2F09%2FTill-its-done_SEO_R33_Sep_1440x697.jpg@webp ทำไมต้องทำตาม &#8220;ขั้นตอนการพัฒนาแอปพลิเคชัน&#8221;? เหตุผลที่ช่วยคุมงบไม่ให้บานปลาย อยากสร้างแอปพลิเคชันคุณภาพสูงในงบประมาณที่ควบคุมได้ อ่านบทความนี้เพื่อเข้าใจขั้นตอนสำคัญที่จะช่วยให้พัฒนาแอปได้อย่างมีประสิทธิภาพและประหยัดงบกันครับ https://imgproxy-landing-page.tillitsdone.com/sig/rs:fit:1200:630/plain/https%3A%2F%2Fcms-r2.tillitsdone.com%2Fwp-content-prod%2Fuploads%2F2025%2F09%2FTill-its-done_SEO_R31_Sep_1440x697.jpg@webp 10 Web Application ตัวอย่างที่คุณอาจไม่รู้ว่าใช้งานทุกวัน พร้อมหลักการทำงานที่ถูกต้อง สงสัยไหมว่า Web Application ที่ใช้ในชีวิตประจำวันทำงานอย่างไร มาดูเบื้องหลังและหลักการสำคัญของ Web Application ที่คุณอาจไม่เคยรู้ พร้อมตัวอย่างที่ไม่เคยรู้มาก่อน https://imgproxy-landing-page.tillitsdone.com/sig/rs:fit:1200:630/plain/https%3A%2F%2Fcms-r2.tillitsdone.com%2Fwp-content-prod%2Fuploads%2F2025%2F09%2FTill-its-done_SEO_R27_Sep_1440x697.jpg@webp เปรียบเทียบ 3 วิธีติดตั้ง install node js บน Ubuntu: NVM vs NodeSource vs Official Repo แบบไหนดีที่สุด? เรียนรู้วิธีติดตั้ง Node.js บน Ubuntu ด้วย NVM, NodeSource หรือ Official Repo เลือกวิธีที่เหมาะกับความต้องการของคุณ พร้อมเปรียบเทียบ เพื่อการพัฒนาที่มีประสิทธิภาพ! https://imgproxy-landing-page.tillitsdone.com/sig/rs:fit:1200:630/plain/https%3A%2F%2Fcms-r2.tillitsdone.com%2Fwp-content-prod%2Fuploads%2F2025%2F09%2FTill-its-done_SEO_R26_Sep_1440x697.jpg@webp Next js image การ Optimization รูปภาพแบบ Native ที่มีประสิทธิภาพสูง เรียนรู้วิธีใช้ Next.js Image เพื่อ Optimization การแสดงภาพบนเว็บไซต์ ด้วยเทคนิคบีบอัด ปรับขนาด Lazy Load และรองรับ Responsive ช่วยให้เว็บคุณโหลดเร็วขึ้นแน่นอน! https://imgproxy-landing-page.tillitsdone.com/sig/rs:fit:1200:630/plain/https%3A%2F%2Fcms-r2.tillitsdone.com%2Fwp-content-prod%2Fuploads%2F2025%2F08%2FTill-its-done_SEO_R22_June_1440x697.jpg@webp Flutter Developer คืออะไร? สำคัญแค่ไหน Flutter Developer คือผู้เชี่ยวชาญด้านการพัฒนาแอปมือถือด้วย Flutter ที่ช่วยสนับสนุนธุรกิจให้เติบโตอย่างรวดเร็วและคุ้มค่า ด้วยเทคโนโลยีที่ยืดหยุ่นและประหยัดต้นทุน https://imgproxy-landing-page.tillitsdone.com/sig/rs:fit:1200:630/plain/https%3A%2F%2Fcms-r2.tillitsdone.com%2Fwp-content-prod%2Fuploads%2F2025%2F07%2FTill-its-done_SEO_R16_June_1440x697-1.jpg@webp จุดเด่นของ React JS คือ ดียังไงกับการทำ Mobile App React JS เป็นไลบรารีที่สนับสนุนการพัฒนาแอปพลิเคชันแบบ Single Page พร้อมรองรับการสร้างแอปบนมือถือด้วย React Native แต่ทำอย่างไร มาดูกันครับ
icons/logo-tid.svgicons/flutter.svg

พูดคุยกับซีอีโอ

พร้อมที่จะสร้างเว็บ/แอปของคุณให้มีชีวิตชีวาหรือเสริมทีมของคุณด้วยนักพัฒนาชาวไทยผู้เชี่ยวชาญหรือไม่?
ติดต่อเราวันนี้เพื่อหารือเกี่ยวกับความต้องการของคุณ แล้วมาสร้างโซลูชันที่ปรับแต่งเพื่อบรรลุเป้าหมายของคุณกัน เรายินดีช่วยเหลือทุกขั้นตอน!
🖐️ Contact us
down Explore our best articles, cover a wide variety of technologies
Our knowledge base
Let's keep in Touch
Thank you for your interest in Tillitsdone! Whether you have a question about our services, want to discuss a potential project, or simply want to say hello, we're here and ready to assist you.
We'll be right here with you every step of the way.
Contact Information
rick@tillitsdone.com+66824564755
Find All the Ways to Get in Touch with Tillitsdone - We're Just a Click, Call, or Message Away. We'll Be Right Here, Ready to Respond and Start a Conversation About Your Needs.
Address
9 Phahonyothin Rd, Khlong Nueng, Khlong Luang District, Pathum Thani, Bangkok Thailand
Visit Tillitsdone at Our Physical Location - We'd Love to Welcome You to Our Creative Space. We'll Be Right Here, Ready to Show You Around and Discuss Your Ideas in Person.
Social media
FacebookInstagramLinkedIn
Connect with Tillitsdone on Various Social Platforms - Stay Updated and Engage with Our Latest Projects and Insights. We'll Be Right Here, Sharing Our Journey and Ready to Interact with You.
We anticipate your communication and look forward to discussing how we can contribute to your business's success.
We'll be here, prepared to commence this promising collaboration.
Frequently Asked Questions
Explore frequently asked questions about our products and services.
Whether you're curious about features, warranties, or shopping policies, we provide comprehensive answers to assist you.