2011-10-03 23 views
7

NSubstitute ile, bir özellik belirleyicisine ilettiğiniz değeri yakalamanın bir yolu var mı?NSubstitute engelleme "ayarlayıcı" sadece özellik çağırma

E.g. Aşağıdaki arayüzü varsa: Ben yolunu kesmek ve herhangi yöntemleri "set" ise değerini yakalamak herhangi bir yolu var mı

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

:

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

Ben vekil oluşturulan örneğin söylüyorlar ikame çağrılır?

cevap

13

NSubstitute için standart yaklaşım, alıcıların özelliklerinin beklendiği gibi çalışacağından (yani, ayarlanmış olanı geri alacağınız), alıcılar ve ayarlayıcılarla özelliklerine sahip olmaktır.

Arayüz setter okunur özelliklere sahip zorundaysa Eğer Arg.Do kullanarak tek özelliğin değerini yakalayabilir: get/set ile bir özellik için

[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

, kullanmak Can sub.Name = Arg.Do (x => name = x); bir değer yakalamak ve hala alt.Name.Returns ("MySampleName") kullanmak için; geri dönen değerler için? 'İade' bizim için çalışmıyor gibi görünüyor! – bstack

+1

Sadece kontrol, aynı get/set özelliği için Arg.Do ve İade karıştırma bir hata gibi görünüyor. Arg.Do'yu When..Do için değiştirirseniz çalışır. Örneğin. "sub.When (x => x.Name = Arg.Any ()). (x => name = x.Arg ());" –

+1

Çalışma için bkz. [Hata raporu] (https://github.com/nsubstitute/NSubstitute/issues/59). Örnek olarak. –