2011-10-03 30 views
7

Với NSubstitute, có cách nào để nắm bắt giá trị bạn chuyển đến một trình thiết lập thuộc tính không?NSubstitute chặn "setter" chỉ yêu cầu bất động sản

Ví dụ: nếu tôi có giao diện như sau:

public interface IStudent { 
    int Id { set; } 
    string Name { set; } 
} 

Các nói rằng tôi có thể thay thế một tạo ra ví dụ:

var _studentSub = Substitute.For<IStudent>(); 

Có cách nào tôi có thể đánh chặn và nắm bắt được giá trị nếu bất kỳ của "thiết lập" phương pháp thay thế được gọi?

Trả lời

13

Cách tiếp cận tiêu chuẩn cho NSubstitute là có các thuộc tính với getters và setters, vì các thuộc tính trên các sản phẩm thay thế sẽ hoạt động như mong đợi (nghĩa là bạn sẽ lấy lại những gì được thiết lập).

Nếu giao diện của bạn phải có tài sản setter-duy nhất bạn có thể nắm bắt được giá trị của một tài sản cá nhân sử dụng Arg.Do:

[Test] 
public void Setter() { 
    var sub = Substitute.For<IStudent>(); 
    var name = ""; 
    sub.Name = Arg.Do<string>(x => name = x); 

    sub.Name = "Jane"; 

    Assert.AreEqual("Jane", name); 
} 
+0

Đối với một tài sản với get/set, bạn có thể sử dụng sub.Name = Arg.Do (x => tên = x); để nắm bắt một giá trị và vẫn sử dụng sub.Name.Returns ("MySampleName"); để trả về giá trị? 'Lợi nhuận' dường như không hoạt động đối với chúng tôi! – bstack

+1

Chỉ cần kiểm tra, có vẻ là một lỗi trộn Arg.Do và Returns cho cùng một thuộc tính get/set. Nó hoạt động nếu bạn chuyển Arg.Do cho When..Do. ví dụ. "sub.When (x => x.Name = Arg.Any ()). Do (x => name = x.Arg ());" –

+1

Xem [báo cáo lỗi] (https://github.com/nsubstitute/NSubstitute/issues/59) để làm việc Khi .. Ví dụ. –

Các vấn đề liên quan