Như tôi đã đọc trong quá khứ, đây là những gì tôi tin rằng mỗi học kỳ là viết tắt của
Stub
Ở đây bạn đang stubbing kết quả của một phương pháp để một giá trị đã biết, chỉ cần để cho các mã chạy mà không có sự cố. Ví dụ: giả sử bạn có các thông tin sau:
public int CalculateDiskSize(string networkShareName)
{
// This method does things on a network drive.
}
Bạn không quan tâm giá trị trả về của phương thức này là gì, nó không liên quan. Thêm vào đó nó có thể gây ra một ngoại lệ khi được thực thi nếu ổ đĩa mạng không có sẵn. Vì vậy, bạn hãy đưa ra kết quả để tránh các vấn đề thực thi tiềm năng với phương thức.
Vì vậy, bạn sẽ làm cái gì đó như:
sut.WhenCalled(() => sut.CalculateDiskSize()).Returns(10);
Fake
Với giả bạn đang trở về dữ liệu giả, hoặc tạo ra một trường hợp giả mạo của một đối tượng. Một ví dụ cổ điển là các lớp kho lưu trữ. Sử dụng phương pháp này:
public int CalculateTotalSalary(IList<Employee> employees) { }
Thông thường phương thức trên sẽ được thông qua một tập hợp các nhân viên được đọc từ cơ sở dữ liệu. Tuy nhiên trong các bài kiểm tra đơn vị của bạn, bạn không muốn truy cập cơ sở dữ liệu. Vì vậy, bạn tạo danh sách nhân viên giả mạo:
IList<Employee> fakeEmployees = new List<Employee>();
Sau đó, bạn có thể thêm các mục vào fakeEmployees và xác nhận kết quả mong đợi, trong trường hợp này là tổng tiền lương.
Mocks
Khi sử dụng các đối tượng giả bạn có ý định để xác minh một số hành vi, hoặc dữ liệu, trên những đối tượng giả. Ví dụ:
Bạn muốn xác minh rằng một phương pháp cụ thể được thực hiện trong quá trình chạy thử nghiệm, đây là một ví dụ generic sử dụng Moq khuôn khổ chế giễu:
public void Test()
{
// Arrange.
var mock = new Mock<ISomething>();
mock.Expect(m => m.MethodToCheckIfCalled()).Verifiable();
var sut = new ThingToTest();
// Act.
sut.DoSomething(mock.Object);
// Assert
mock.Verify(m => m.MethodToCheckIfCalled());
}
Hy vọng rằng ở trên sẽ giúp làm sáng tỏ mọi thứ một chút.
EDIT: Roy Osherove cũng là người ủng hộ sự phát triển thử nghiệm và có một số thông tin rất tốt về chủ đề này.Bạn có thể tìm thấy nó rất hữu ích:
http://artofunittesting.com/
Đọc http://xunitpatterns.com/Mocks,%20Fakes,%20Stubs%20and%20Dummies.html và http://martinfowler.com/articles/mocksArentStubs.html – blank
Và khi bạn đang ở bạn cũng có thể đọc http://www.mockobjects.com/files/mockrolesnotobjects.pdf – blank
Tôi hy vọng bạn sẽ tha thứ cho thương mại, nhưng chúng tôi đã viết toàn bộ cuốn sách "Phát triển phần mềm hướng đối tượng", giải quyết động lực cho sử dụng mocks. –