2016-07-05 1 views
1

Я использую NSubstitute. Я должен подделать класс и не могу выкопать разницу Substitute.For<...>() и Substitute.ForPartsOf<...>. Я уже читал документацию, но не понимаю, где двое ведут себя по-другому.NSubstitute: Разница между Substitute.For <> и Substitute.ForPartsOf

+0

Для справки, документация, упомянутая в вопросе, [здесь] (http://nsubstitute.github.io/help/partial-subs/). –

ответ

3

Substitute.For <>() создает полный макет, а Substitute.ForPartsOf <> создает частичный издеваться. Например:

[Test] 
public void Test() 
{ 
    var person = Substitute.For<Person>(); 
    person.GetAge().Returns(20); 
    var age = person.GetAge(); //returns 20 
    var name = person.GetName(); //returns empty string 

    var partialPerson = Substitute.ForPartsOf<Person>(); 
    partialPerson.GetAge().Returns(20); 
    var age2 = partialPerson.GetAge(); //returns 20 
    var name2 = partialPerson.GetName(); //returns John 
} 

public class Person 
{ 
    public string Name { get; } = "John"; 
    public int Age { get; } = 10; 

    public virtual int GetAge() 
    { 
     return Age; 
    } 

    public virtual string GetName() 
    { 
     return Name; 
    } 
} 

Вообще ForPartsOf <> будет использовать конкретную реализацию, если он не был заменен.

Смежные вопросы