Vì vậy, tôi có một lớp học với một phương pháp như sau:Làm thế nào để đơn vị kiểm tra một chi tiết thực hiện như bộ nhớ đệm
public class SomeClass
{
...
private SomeDependency m_dependency;
public int DoStuff()
{
int result = 0;
...
int someValue = m_dependency.GrabValue();
...
return result;
}
}
Và tôi đã quyết định rằng thay vì gọi m_dependency.GrabValue()
mỗi lần, tôi thực sự muốn bộ nhớ cache giá trị trong bộ nhớ (tức là trong lớp này) vì chúng ta sẽ nhận được cùng một giá trị mỗi lần (phụ thuộc sẽ tắt và lấy một số dữ liệu từ một bảng mà hầu như không bao giờ thay đổi).
Tôi đã gặp sự cố tuy nhiên cố mô tả hành vi mới này trong thử nghiệm đơn vị. Tôi đã thử những điều sau (Tôi đang sử dụng NUnit với RhinoMocks):
[Test]
public void CacheThatValue()
{
var depend = MockRepository.GeneraMock<SomeDependency>();
depend.Expect(d => d.GrabValue()).Repeat.Once().Return(1);
var sut = new SomeCLass(depend);
int result = sut.DoStuff();
result = sut.DoStuff();
depend.VerifyAllExpectations();
}
Tuy nhiên, điều này không hiệu quả; kiểm tra này vượt qua ngay cả khi không giới thiệu bất kỳ thay đổi nào đối với chức năng. Tôi đang làm gì sai?
Xin lỗi vì đã đặt câu hỏi, nhưng tại sao lại kiểm tra điều gì đó là chi tiết triển khai? – Robert