Câu trả lời của câu hỏi stub là gì đang được nhiều người tìm kiếm nhưng không phải ở đâu cũng có. Bởi vậy câu hỏi stub là gì sẽ được giải đáp ở dưới đây.
Stub là gì
Cuộc sống này có nhiều điều thú vị lắm mà có lẽ bạn chưa biết đâu bạn à. stub là gì chính là một trong những điều ấy đó bạn. Chính vì thế mà hãy đọc ngay bài viết này để có thể có được đáp án cho thắc mắc stub là gì bạn nhé. Như vậy là bạn sẽ biết thêm một điều thú vị trong cuộc sống ấy.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ConsoleApp.Company; namespace ConsoleApp { public interface IExtensionNanager { Boolean CheckExtension(string FileName); } public class ExtensionManager : IExtensionNanager { public bool CheckExtension(string FileName) { //Some complex business logic might goes here. May be DB operation or file system handling return false; } } //Stub implementation to bypass actual Extension manager class. public class StubExtensionManager : IExtensionNanager { public bool CheckExtension(string FileName) { return true; } } public class FileChecker { IExtensionNanager objmanager = null; //Default constructor public FileChecker() { objmanager = new ExtensionManager(); } //parameterized constructor public FileChecker(IExtensionNanager tmpManager) { objmanager = tmpManager; } public Boolean CheckFile(String FileName) { return objmanager.CheckExtension(FileName); } } }
Code này là rất đơn giản để hiểu. Chúng ta đã có một class FileChecker đơn giản. Class quản trị FileExtension trong thực tiễn không được implement đầy đủ và thế cho nên chúng ta có một phiên bản sơ khai của class. Chúng ta hoàn toàn có thể thấy rằng những tính năng CheckExtension sẽ luôn luôn đúng, khi tất cả tất cả tất cả chúng ta định nghĩa một cách rõ ràng.
Dưới đấy là code unit test:
using System; using System.Web.Mvc; using Microsoft.VisualStudio.TestTools.UnitTesting; using MVCApplication.Controllers; using Moq; using ConsoleApp.Company; using ConsoleApp; namespace TestMVC { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { //Act StubExtensionManager stub = new StubExtensionManager(); FileChecker checker = new FileChecker(stub); //Action bool IsTrueFile = checker.CheckFile("myFile.whatever"); //Assert Assert.AreEqual(true, IsTrueFile); } } }
Và code unit test trên sẽ luôn luôn pass bởi vì chúng ta đã sử dụng các công dụng được định nghĩa Stub và nó sẽ làm cho code unit test luôn đúng.
Vậy một lần tiếp nữa để làm rõ hơn ý tưởng sáng tạo ban đầu, Stub được sử dụng để luôn luôn vượt qua unit test bởi vì chúng ta biết những gì chúng ta đang thực thi và tại sao? Mục đích của chúng ta là để sở hữu thể pass qua phần unit test này.
Thực hiện Mock trong ví dụ
Bây giờ chúng ta sẽ thực thi với một Mock object. Có thật nhiều những phương pháp mocking khác nhau, nhưng để làm rõ hơn về bản chất tôi sẽ thực thi một cách mockig viết tay đơn giản.
Một điểm quan trọng về mock là, tất cả chúng ta có thể sử dụng một đối tượng mock để kiểm tra class chính trong unit test.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ConsoleApp.Company; namespace ConsoleApp { public interface IServiceProvider { void extensionService(String fileName); } //Mock extenison service provider public class MockExtensionService : IServiceProvider { public string ErrorMessage = null; public void extensionService(string fileName) { if (fileName.Split('.')[1] != "myType") { ErrorMessage = "Wrong Type"; } } } //Actual incomplete ExtensionManager functionality public class ExtensionManager : IServiceProvider { public void extensionService(string fileName) { throw new NotImplementedException(); } } public class ExtensionAnalyzer { public IServiceProvider provider = null; public ExtensionAnalyzer(IServiceProvider tmpProvider) { provider = tmpProvider; } public void ExtensionCheck(string fileName) { provider.extensionService(fileName); } } }
Thực hiện rất đơn giản, chúng tôi đã chỉ việc thực hiện một class Mock và class đó sẽ bắt chước những tính năng thực tế. Dưới đấy là code unit test.
using System; using System.Web.Mvc; using Microsoft.VisualStudio.TestTools.UnitTesting; using MVCApplication.Controllers; using Moq; using ConsoleApp.Company; using ConsoleApp; namespace TestMVC { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { //Act MockExtensionService mockobject = new MockExtensionService(); //Inject mock object now ExtensionAnalyzer analyzer = new ExtensionAnalyzer(mockobject); //Action analyzer.ExtensionCheck("somefile.someextension"); //Assert Assert.AreEqual(mockobject.ErrorMessage, "Wrong Type"); } } }
Mock data là gì
Bạn à, nếu như muốn biết được đáp án cho thắc mắc mock data là gì thì đừng bỏ qua bài viết này nhé. Chắc hẳn bạn sẽ hiểu được mock data là gì sau khi đọc bài viết này ấy. Chính vì thế hãy dành ra chút thời gian quý báu của bạn để có thể tìm được đáp án cho thắc mắc mà bạn gặp phải nhé.
Lại ví dụ về cái form login:
Khi bạn điền thông tin Email password và click Sign in, thực chất là System này gửi 1 HTTP request: http://realapiserver/login với data {“email”:”[email protected]”,”password”:”123″}. Hãy cứ giả sử test case của bạn là kỳ vọng màn hình hiển thị trả về HomePage
Cách tiếp cận cổ xưa này có nhiều bất cập:
1/ Bạn mang tiếng là test Front End, nhưng thực ra là bạn phải đợi cho Back End trả về. Đôi khi nó khá mất thời hạn trong tổng số step của bạn
2/ Nếu Back End sai, tức là thay vì mình nhập data đúng nó phải trả về Success thì nó lại trả về fail –> test case UI cũng fail. Thực ra thì, nếu đây xem là e2e test case thì OK. Nhưng mà, ý tôi là người làm Front End không còn cơ hội để kiểm tra cái code mình làm ra có đúng hay không, vì Back End đã bị sai rồi. Nếu team bạn có apply CI/CD thì nó sẽ là thiệt thòi lớn cho bạn.
3/ Nếu cái API này chưa có, là coi như bạn khỏi kiểm tra Front End luôn. Như vậy, Back End API cứ phải chạy trước Front End. Front End có mong muốn làm trước cũng không được.
Nói tóm lại, nếu như khách hàng chỉ mong sao test UI, vì cái mà team bạn làm ra, hoặc là cái mà công ty bạn khiến cho khách hàng chỉ là UI. Hoặc team của bạn muốn làm UI trước Back End mà vẫn muốn tìm ra những lỗi chỉ do code của bạn gây ra, thì mock test là một Một trong những lựa chọn hợp lý.
Mock test cũng gần như thể là bắt buộc khi bạn phải giả lập một server của một 3rd party ( ví dụ app payment của bạn link với server ngân hàng). Trong trường hợp này, bạn buộc phải lập ra 1 mock server, và thông số kỹ thuật input và output của nó theo như document được thỏa thuận hợp tác giữa bạn và 3rd party.
Mock unit test là gì
Hãy để cho câu hỏi mock unit test là gì kích thích sự tò mò của bản thân bạn nhé. Và bạn sẽ đọc bài viết dưới đây để có thể có được đáp án cho thắc mắc mock unit test là gì ấy. Như thế bạn đã biết thêm được một kiến thức hay cũng như bổ ích đúng không nào.
- Code Unit Test phải ngắn gọn, dễ hiểu, dễ đọc.
- Mỗi Unit Test là một đơn vi riêng biệt, độc lập, không phụ thuộc vào vào unit khác.
- Mỗi Unit Test là 1 method trong test class, tên method cũng là tên gọi UnitTest. Do đó ta nên được đặt tên hàm rõ ràng, nói rõ Unit Test này test cái gì (Test_A_Do_B), tên method có thể rất dàiii cũng không sao.
- Unit Test phải nhanh, vì Unit Test sẽ tiến hành chạy để kiểm định lỗi mỗi lần build. Do đó trong Unit Test nên hạn chế các task tốn thời hạn như gọi I/O, database, network,…
- Unit Test nên test từng đối tượng người tiêu dùng riêng biệt. Vd: Unit Test cho Business Class thì chỉnh test chính BusinessClass đó, tránh việc dụng tới những class móc nối với nó (DataAccess Class chẳng hạn).
Stub và driver là gì
Nếu như bạn muốn có được đáp án cho thắc mắc stub và driver là gì thì hãy đến ngay với chúng mình nhé. Trong bài viết này chúng mình sẽ giải thích cho bạn biết được stub và driver là gì ấy bạn à. Chính vì thế mà bạn có thể biết thêm một điều thú vị hơn ấy. Vì thế hãy ủng hộ chúng mình bằng cách đọc bài viết stub và driver là gì này nhé bạn.
Trong chiêu thức này, thực thi kiểm thử bằng phương pháp nối hai hoặc nhiều mô-đun có tương quan đến logic. Sau đó, những mô-đun liên quan khác được thêm vào và được kiểm tra công dụng thích hợp. Quá trình liên tục cho tới khi toàn bộ những mô-đun được tham gia và kiểm thử thành công. Cách tiếp cận ngày càng tăng được thực hiện bởi hai Phương pháp khác nhau:
- Phương pháp Bottom up
- Phương pháp Top Down
- Phương pháp Sandwich – Kết hợp từ trên xuống và từ dưới lên
2.1. Stub và Driver là gì?
Phương pháp tiếp cận gia tăng được thực hiện bằng phương pháp sử dụng các chương trình giả mang tên là Stub và Driver. Stub và Driver không thực hiện toàn bộ logic lập trình của mô-đun phần mềm mà chỉ mô phỏng giao tiếp tài liệu bằng phương pháp gọi module.
Stub: Được gọi bởi Mô-đun đang được kiểm thử. Driver: Gọi Mô-đun để được kiểm tra.
2.2. Phương pháp Bottom up:
Trong Phương pháp Bottom up, mỗi mô-đun ở những thấp cấp hơn được kiểm tra với những mô-đun cao hơn nữa cho đến lúc toàn bộ các mô-đun được kiểm tra. Lúc này, sẽ cần tới việc hỗ trợ của Driver trong việc kiểm thử.
Biểu đồ biểu diễn:*Ưu điểm:
- Việc tìm kiếm bug trong từng module riêng không liên quan gì đến nhau là một thử thách.
- Không có thời hạn bị tiêu tốn lãng phí khi chờ đón toàn bộ những mô-đun được phát triển (không in như giải pháp Big-bang)
- Các mô-đun quan trọng (ở cấp tốt nhất của kiến trúc phần mềm) mà kiểm soát luồng ứng dụng được kiểm tra ở đầu cuối và hoàn toàn có thể dễ bị lỗi.
- Xây dựng một bản mẫu (prototype) ngay từ khởi đầu – là một điều không thể
2.3. Phương pháp Top Down:
Trong Phương pháp Top Down, việc kiểm thử diễn ra từ trên xuống dưới theo luồng tinh chỉnh và điều khiển của mạng lưới hệ thống phần mềm. Lúc này, sẽ cần tới việc hỗ trợ của Stubs trong việc kiểm thử.
Biểu đồ biểu diễn:*Ưu điểm:
- Việc tìm kiếm bug trong từng module riêng không liên quan gì đến nhau trở nên thuận tiện hơn
- Xây dựng một bản mẫu (prototype) ngay từ khởi đầu là có thể
- Các mô-đun quan trọng được kiểm thử ưu tiên; lỗi thiết kế chính có thể được tìm thấy và thay thế sửa chữa trước
- Cần nhiều Stubs.
- Các mô-đun ở mức thấp hơn được kiểm thử không đầy đủ.
2.4. Phương pháp Sandwich
Phương pháp sandwich / hybrid là sự việc tích hợp của chiêu thức Top Down và bottom up. Ở đây, những mô-đun số 1 được kiểm tra với những mô-đun thấp hơn đồng thời những mô-đun thấp hơn được tích hợp với những mô-đun số 1 và được kiểm thử. Chiến lược này sử dụng cả Stubs cũng như Drivers.
C. Làm thế nào để kiểm thử tích hợp?
Quy trình kiểm thử tích hợp bất kể kế hoạch kiểm thử ứng dụng (đã luận bàn ở trên):
- Chuẩn bị kế hoạch kiểm tra tích hợp
- Thiết kế những kịch bản thử nghiệm, những trường hợp test và scripts
- Thực hiện các trường hợp kiểm thử tiếp theo bằng phương pháp báo cáo giải trình các lỗi
- Theo dõi & kiểm tra lại các lỗi
- Bước 3 và 4 được tái diễn cho tới lúc triển khai xong Tích hợp thành công.
Như vậy tất tần tật nội dung trong bài viết này sẽ là những thông tin giải đáp cho câu hỏi stub là gì. Mong rằng nội dung trong bài viết này sẽ mang tới thông tin hữu ích giúp bạn hiểu rõ hơn về stub là gì. Cảm ơn bạn đã luôn theo dõi và ủng hộ trang của chúng tôi. Hẹn gặp lại trong bài viết tiếp theo.