Mục lục nội dung
Chế nhạo
Các bài viết từ dự án mở Từ điển Anh-Việt.
/ mɔk /
Tổng quan
Danh từ 
(cổ xưa, cổ xưa) chế nhạo, chế nhạo, chế nhạo
tạo ra một mô hình của someonemock một ai đó, một người nào đó giả
Tính từ 
Giả, nhái
không có thật sự khiêm tốn mô phỏng chiến trường mô hình trận chiến mô phỏng nhungfake nhung
Ngoại động từ
Chế giễu, chế nhạo, chế nhạo
Gọi; khinh thường
Lừa, lừa, lừa
Nhại lại, giả vờ
Để viết nhật ký
(+ at) chế giễu, chế nhạo, chế nhạo
Chuyên nghành
Dệt may
sự giả mạo
Kỹ thuật chung
đồ giả
mô phỏng
người bắt chước
Các từ liên quan
Từ đồng nghĩa 
tính từ
khỉ * giả *, giả, giả, ersatz *, giả, giả, giả, giả, giả, giả, giả *, giả, bắt chước, giả vờ, bắt chước, giả, giả, giả *, lừa đảo, gần như *, giả *, mô phỏng, cái gọi là *, giả mạo, thay thế, không thật, nhân tạo, tổng hợp
động từ
thằng hề, lố bịch, Biếm họa, nói xấu, nhạo báng, khinh thường, hoot, sự xúc phạm, Trò đùa, chế nhạo, đứa trẻ, cười, nhạo báng, cây kim, nhại lại, nhạo báng, Tập hợp, xương sườn *, chế giễu, coi thường, tỏ ra khinh thường, Chế giễu, Chế giễu, Trêu ghẹo, Ngón tay cái, Nhại lại, Ảnh hưởng, con khỉ, giả vờ, giả mạo, giống nhau, Làm, giả mạo, mô phỏng, Đùa, Bắt chước, phỉ báng, kịch câm, gương, Chế giễu, Gửi *, mô phỏng, Bắn *, lừa dối, bác bỏ, kẻ phản bội, thách thức, gian lận , ngạc nhiên, thách thức, đánh lừa, thất vọng, lừa dối *, lừa dối, né tránh, lá bạc, đánh lừa, thất vọng, tung hứng, buông xuôi *, đánh lừa, bán *, can thiệp, chế nhạo, đùa, cười, do thám, tweet, bắt chước, giả tạo, né tránh , chọc phá, sao chép,lừa dối, phớt lờ, nói dối, trò hề, tán tỉnh, bắt chước, chế nhạo, đùa cợt, nhân cách hóa, chế nhạo, do thám, giả vờ, kích thích, trêu chọc
имя существительное
burlesque , caricature , farce , parody , sham , travesty
Từ trái nghĩa 
adjective
authentic , genuine , real
verb
flatter , praise , exalt , tell truth
Từ điển: Thông dụng | Dệt may | Kỹ thuật chung
Đã đăng vào thg 6 28, 2015 3:19 PM 7 phút đọc24.3K211
Tìm hiểu về Stub, Mock và Fake trong unit test
Bài đăng này đã không được cập nhật trong 6 năm
Trong bài viết này, tôi tìm hiểu về ba khái niệm rất quan trọng trong unit test là Stub, Mock và Fake, ý nghĩa khái niệm của chúng là gì và chúng được sử dụng như thế nào trong điều kiện nào. Đầu tiên, chúng ta cần định nghĩa unit test là gì và mô hình TDD là như thế nào. Các bạn có thể tham khảo các khái niệm trên ở link sau: unit-test-voi-phat-trien-phan-mem-hien-dai
Cả ba khái niệm Stub, Mock và Fake đều rất quan trọng trong unit test và gắn liền với định nghĩa về “de-coupled” architecture design. “de-coupling” architecture có mục đích chính là thiết kế phần mềm sao cho chúng ta có thể tách phần mềm ra thành các phần riêng biệt (các unit) mà không bị ảnh hưởng bởi các phần khác hoặc chỉ bị ảnh hưởng một cách tối thiểu.
Ví dụ, tôi có một class cần viết unit test và các class khác liên quan như kết nối DB hoặc call service api. Bây giờ, tôi muốn kiểm tra các class, nơi các đối tượng phụ thuộc là chưa sẵn sàng, vì vậy trong tình huống này, tôi cần phải thực hiện một đối tượng Mock hoặc Fake để kiểm tra class của tôi. Chúng ta sẽ bỏ qua thực tế hoạt động DB hoặc kết quả thực sự của việc call service. Theo cách này chúng ta có thể kiểm tra logic chính của class mà chúng ta cần thực hiện unit test.
1. Mock là gì?
Mock object (MO) là một đối tượng ảo mô phỏng các tính chất và hành vi giống hệt như đối tượng thực được truyền vào bên trong khối mã đang vận hành nhằm kiểm tra tính đúng đắn của các hoạt động bên trong. Mock object có các đặc điểm sau:
- Đơn giản hơn đối tượng thực nhưng vẫn giữ được sự tương tác với các đối tượng khác.
- Không lặp lại nội dung đối tượng thực.
- Cho phép thiết lập các trạng thái riêng trợ giúp cho việc thực hiện unit test.
2. Stub là gì?
Stub là một chương trình hoặc thành phần giả lập (thay thế cho chương trình hoặc thành phần chưa code xong để kiểm thử) nó dùng để kiểm thử… ví dụ, trong một dự án có 4 modules, nhưng đến lúc test mà còn một module chưa code xong, để test được thì cần phải có 4 modules này, vậy thì cần phải có một chương trình giả lập module này để thực hiện test. Chương trình giả lập cho module này được gọi là STUB.
Oh, cả hai đều có vẻ khó hiểu!
Khi tôi bắt đầu tìm hiểu về unit test, tôi rất khó để phân biệt được Mock và Stub khác nhau như thế nào, cả hai đều rất giống nhau trong khái niệm. Nhưng một khi bạn hiểu đúng cách rồi thì bạn sẽ nhận ra sự khác biệt thực sự.
Một Stub không thể trả về kết quả unit test là fail bởi vì bạn biết những gì bạn đang thực hiện và lý do tại sao bạn đang thực hiện nó, Nó được sử dụng là để thay thế cho một module và được giả sử là phải thực hiện đúng các nhiệm vụ được giao. Tuy nhiên, Mock object chỉ là một đối tượng mà bắt chước các đối tượng thực sự. Nếu logic chính của method là sai thì các unit test sẽ fail ngay cả khi chúng ta thiết lập mock object chính xác.
3. Fake là gì
Như chúng ta biết, ý nghĩa của Fake là giả, không thật. Đó là một ý nghĩa nói chung, nó có thể chỉ tới một một object thật hoặc một object giả hoặc giả hoặc một cái gì đó không có thật.
Vì vậy, Fake là một thuật ngữ chung chung, mà có thể trỏ đến bất cứ điều gì.
4. Ví dụ:
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) { return false; } } public class StubExtensionManager : IExtensionNanager { public bool CheckExtension(string FileName) { return true; } } public class FileChecker { IExtensionNanager objmanager = null; public FileChecker() { objmanager = new ExtensionManager(); } 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 lý FileExtension thực tế không được implement đầy đủ và vì vậy chúng ta có một phiên bản sơ khai của class. Chúng ta có thể thấy rằng các chức năng CheckExtension sẽ luôn luôn đúng, khi 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() { StubExtensionManager stub = new StubExtensionManager(); FileChecker checker = new FileChecker(stub); bool IsTrueFile = checker.CheckFile("myFile.whatever"); 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 chức năng được định nghĩa Stub và nó sẽ làm cho code unit test luôn đúng.
Một lần nữa, để làm rõ ý tưởng ban đầu, phần sơ khai luôn được sử dụng để vượt qua các bài kiểm tra đơn vị vì chúng tôi biết mình đang làm gì và tại sao? Mục tiêu của chúng tôi là vượt qua bài kiểm tra đơn vị này.
Ví dụ về triển khai mô phỏng
Bây giờ chúng ta hãy giải quyết đối tượng Mock. Có nhiều cách khác nhau để chế nhạo, nhưng để hiểu rõ hơn về vấn đề, tôi sẽ làm một mockig viết tay đơn giản.
Điểm quan trọng với mock là chúng ta có thể sử dụng mock object để kiểm tra lớp chính trong bài kiểm tra đơn vị.
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); } public class MockExtensionService : IServiceProvider { public string ErrorMessage = null; public void extensionService(string fileName) { if (fileName.Split('.')[1] != "myType") { ErrorMessage = "Wrong Type"; } } } 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); } }}
Việc triển khai rất đơn giản, chúng tôi chỉ thực hiện lớp Mock và lớp này sẽ bắt chước chức năng thực tế. Dưới đây là mã cho bài kiểm tra đơn vị.
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() { MockExtensionService mockobject = new MockExtensionService(); ExtensionAnalyzer analyzer = new ExtensionAnalyzer(mockobject); analyzer.ExtensionCheck("somefile.someextension"); Assert.AreEqual(mockobject.ErrorMessage, "Wrong Type"); } }}
Để kết luận
Trong bài viết này, chúng tôi đã khám phá các khái niệm về Stub và Mock trong kiểm thử đơn vị. Hy vọng bài viết này giúp bạn hiểu rõ hơn về chúng. Chúng ta cần lựa chọn sử dụng sơ khai hay giả lập trong các tình huống cụ thể. Sơ khai sẽ giúp bạn khi bạn muốn thay thế các chức năng hiện có, Mock sẽ giúp bạn khi bạn muốn mô phỏng các chức năng thực.
Đã đăng ký Bản quyền
Video Mock là gì |Tất tần tật về mock
Cảm ơn các bạn đã theo dõi bài viết Mock là gì |Tất tần tật về mock!. 123 DocX hi vọng đã mang đến thông tin hữu ích cho bạn. Xem thêm các bài viết cùng danh mục Hỏi đáp. Nếu thấy hay hãy chia sẻ bài viết này cho nhiều người được biết. 123 DocX chúc bạn ngày vui vẻ
“