2013-06-20 5 views
3

я следующее:Как издеваются ObservableCollection

class foo : ObservableCollection<Int32> 
{ 
    //Stuff 
} 


[Test] 
public void test() 
{ 
    var foo = Mock.Of<foo>(); 
    int count = 0; 
    Mock.Get(foo).Setup(x => x.Add(It.IsAny<Int32>())).Callback(() => count++); 
    Mock.Get(foo).Setup(x => x.Count).Returns(() => count); 
    //Do Stuff 
} 

Однако Add и Count и особенно indexer[] не переписываемыми. Является ли мой единственный ресурс, чтобы создать Addfoo, который вызывает Add в моем классе foo и т. Д.?

+1

Почему вы хотите издеваться над этим? – ken2k

ответ

4

Я не думаю, что вы должны издеваться над такими базовыми типами, как List, ObservableCollection, или DateTime (даже если это было возможно). Они надежны и вряд ли изменятся. Просто используйте ObservableCollection в своем тесте вместо того, чтобы пытаться повторно реализовать его увеличивающую количество функций. Вы всегда можете сделать состояние на основе проверки:

var items = new ObservableCollection<int>(); 
// Do stuff 
Assert.That(items.Count, Is.EqualTo(5)); 

Если вы используете свой собственный тип Foo, который наследуется от ObservableCollection<Int32>, то вы можете также реализовать некоторые IFoo интерфейс, который будет легко издеваться:

public class Foo : ObservableCollection<Int32>, IFoo 
+0

Да, мне нужно глубже взглянуть на то, что действительно нужно для теста. Это испытание коллеги, и я забыл о золотом правиле, чтобы задать вопрос о первоначальном предположении. Это может быть самой проблемой –

+2

Поскольку в foo есть функциональность, мы просто устанавливаем 'CallBase = true' на макет. Таким образом, нам не нужно беспокоиться о переопределении Add, Count и т. Д. Но, может переопределить пользовательский материал –

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