Sử dụng RhinoMocks, tôi đang cố gắng để Stub giá trị getter của một tài sản. Thuộc tính được định nghĩa là một phần của Giao diện chỉ có quyền truy cập getter.Đổ một tài sản có được sử dụng tê giác Mocks
Tuy nhiên tôi nhận được lỗi "Cuộc gọi không hợp lệ, cuộc gọi cuối cùng đã được sử dụng hoặc không có cuộc gọi nào được thực hiện (đảm bảo rằng bạn đang gọi phương thức ảo (C#)/Ghi đè (VB))." Tôi hiểu điều này có thể có nghĩa là tài sản tôi đang stubbing không phải là ảo; Tuy nhiên, nó là một phần của Giao diện và tôi không chắc liệu đó có phải là lý do tại sao tôi gặp phải lỗi này hay không ..
Dưới đây là bộ xương mã. Nếu tôi bỏ ghi chú dòng "stubRepository.Stub (x => x.StoreDeviceID) .PropertyBehavior();", thì tôi gặp lỗi mới "Thuộc tính phải được đọc/ghi". Tôi đã tìm kiếm trên SO và tìm thấy trang this. Nhưng giải pháp được đề xuất không giúp tôi. Có suy nghĩ gì không?
public interface IStore {
string StoreDeviceID {get;}
//other methods
}
public static class Store {
private IStore Repository;
public void SetRepository(IStore rep){
Repository = rep;
}
public StoredeviceID {
get{
return Repository.StoreDeviceID;
}
}
//other methods
}
public class TestClass {
[Test]
public void TestDeviceID() {
var stubRepository =
MockRepository.GenerateStub<IStore>();
Store.SetRepository(stubRepository);
//stubRepository.Stub(x => x.StoreDeviceID).PropertyBehavior();
SetupResult.For(stubRepository.StoreDeviceID).Return("test");
Assert.AreSame(Store.StoreDeviceID, "test");
}
}
@ Adam, Vì thuộc tính là chỉ đọc, tôi không thể đặt trên đó. Tuy nhiên, đoạn mã bạn cung cấp cho Stub thuộc tính hoạt động hoàn hảo. Silly tôi, tôi đã thử tất cả các tùy chọn khác ngoại trừ điều đó :) – Santhosh
StoreDeviceID không có setter, vì vậy câu lệnh đầu tiên của bạn 'stubRepository.StoreDeviceID =" test ";' sẽ không hoạt động. –
Ahh - xin lỗi. Tôi sẽ cập nhật câu trả lời của tôi - vui vì bạn đã làm nó mặc dù. –