2013-02-25 5 views
1

Как я могу издеваться и настроить одно свойство так, чтобы любой другой член, который на основе этого свойства не нуждался в настройке.Свойство, которое зависит от свойства Focked

public interface IFoo{ 
    public Foo { get; set; } 
    public Foo2 { get; } 
} 

public class Foo :IFoo{ 
    public Foo { get; set; } 
    public Foo2 { get {return this.Foo +" second";} } 
} 


public void FooTest(){ 
    var f = Mock<IFoo>(); 
    f.SetupGet(x=> x.Foo).Returns("Foo"); 

    // Should print 'Foo second' although there's no setup for Foo2 
    Console.Write(f.Object.Foo2); 
} 

ответ

1

Не совсем уверен, почему вы хотите это сделать, но моя первая мысль использовать Reflection перебрать членов класса и настройки каждого из них, хотя и не уверен, действительно уверен, почему кто-то будет делать это. Думаю, вы пытаетесь сэкономить время?

Хотя не вполне применимы, вы могли бы отлить это к вашим потребностям, как это имеет отношение:

Generating mock objects for test cases

2

В вашем примере, вы создаете макет интерфейса IFoo, поэтому нет ИСПОЛНЕНИЯ Foo2. Реализация объекта Foo не имеет значения в этом случае, потому что вы никогда не создаете экземпляр объекта Foo. f является макетом IFoo и, следовательно, не имеет никакого отношения к объекту Foo, за исключением того, что они оба реализуют один и тот же интерфейс. Вы пробовали что-то вроде этого?

var f = Mock<IFoo>(); 
f.SetupGet(x => x.Foo).Returns("Foo"); 
f.SetupGet(x => x.Foo2).Returns(f.Foo + "Second"); 

Я не совсем уверен, что вы пытаетесь выполнить, однако, я предполагаю.

+0

Я подозреваю, что из формулировки он не хочет называть программу установки для каждого члена, определенно, просто догадка! –

+1

А, так, по сути, заглушка? Если да, вот ответ, решая этот вопрос: http://stackoverflow.com/questions/3672463/unit-testing-mock-stub-definitions-in-moq –

+0

теперь, если у меня есть пятнадцать элементов, имеющих Foo2, мне нужно установить их всех – Agzam

2

В вашем вопросе, это запутывает (и незаконно в C#), что свойство Foo внутри класса Foo имеет то же имя, что и класс, членом которого он является. Также вам не хватает типов ваших свойств (предположительно string). Поэтому, пожалуйста, придумайте код, который компилируется.

После того, как вы это сделали, я думаю, будет ясно, что ваш Mock<> относится только к интерфейсу IFoo. Может быть много классов и структур, реализующих IFoo. Как Мок знал, что вы думали о классе Foo, в котором есть связь между геттерами двух свойств?

IFoo не может указывать требуемую связь между двумя свойствами; это интерфейс.

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