Mocks/stubs/fakes/test double/etc. là tốt trong các bài kiểm tra đơn vị, và cho phép kiểm tra lớp/hệ thống được kiểm tra trong sự cô lập. Kiểm tra tích hợp có thể không sử dụng bất kỳ mocks nào; họ thực sự nhấn vào cơ sở dữ liệu hoặc phụ thuộc bên ngoài khác.
Bạn sử dụng mô hình hoặc sơ khai khi cần. Nói chung điều này là do lớp bạn đang cố kiểm tra có sự phụ thuộc vào giao diện. Đối với TDD, bạn muốn lập trình giao diện, không triển khai và sử dụng tiêm phụ thuộc (nói chung).
Một trường hợp rất đơn giản:
public class ClassToTest
{
public ClassToTest(IDependency dependency)
{
_dependency = dependency;
}
public bool MethodToTest()
{
return _dependency.DoSomething();
}
}
IDependency là một giao diện, có thể là một với cuộc gọi đắt (truy cập cơ sở dữ liệu, các cuộc gọi dịch vụ web, vv). Một phương pháp thử nghiệm có thể chứa mã tương tự như:
// Arrange
var mock = new Mock<IDependency>();
mock.Setup(x => x.DoSomething()).Returns(true);
var systemUnderTest = new ClassToTest(mock.Object);
// Act
bool result = systemUnderTest.MethodToTest();
// Assert
Assert.That(result, Is.True);
Lưu ý rằng tôi đang thực hiện kiểm tra trạng thái (như @Finglas đề xuất) và tôi chỉ khẳng định hệ thống đang được kiểm tra (ví dụ của lớp I ' m thử nghiệm). Tôi có thể kiểm tra các giá trị thuộc tính (trạng thái) hoặc giá trị trả về của một phương thức, như trường hợp này cho thấy.
Tôi khuyên bạn nên đọc The Art of Unit Testing, đặc biệt nếu bạn đang sử dụng .NET.
Để kiểm tra điểm cuối cùng của bạn: http://martinfowler.com/articles/mocksArentStubs.html chỉ để đảm bảo bạn nhận thức được sự khác biệt. – Finglas
Dưới đây là một số đọc tốt để giải quyết một số câu hỏi sau: http://xunitpatterns.com/TestStrategy.html –