2012-05-30 3 views
1

Просто пример: У меня есть класс, который реагирует на задание свойств. Более конкретно, есть три свойства, из которых сборка загружается после их установки. После этого запускается событие.Сделать присвоение недвижимости Действие

Мой модульного тестирования для такого поведения выглядеть примерно так:

bool assemblyLoaded = false; 
loader.AssemblyLoaded +=() => assemblyLoaded = true; 
loader.Type = "someType"; 

Assert.IsFalse(assemblyLoaded); // not loaded, only one property was set 

Это привело бы к трем модульных тестов, один тест для каждого свойства. Поэтому я хотел бы абстрагироваться испытание с использованием методы помощи (см ниже), чтобы избежать репликаций коды:

private void Testfoobar(Action setProperty) 
{ 
    bool assemblyLoaded = false; 
    loader.AssemblyLoaded += (sender, args) => assemblyLoaded = true; 
    setProperty(); 
} 

К сожалению, я не могу сделать присвоение имущества в действие.

Итак, интересно, можете ли вы каким-то образом «трансформировать» задание в действие? Или может быть другой способ абстрагировать код?

+0

Какую ошибку вы получаете? –

ответ

2

Что вы имеете в виду, когда говорите, что не можете сделать присвоение недвижимости действием?
Что вы не можете выполнить назначение в действии?
Почему вы не можете использовать

Action<loader> action =(loader)=>loader.Type="someType"; 

Если вы хотите сделать это с делегатом, вы можете использовать Функцион <> делегатов:

Func<string> funct =()=>"someType"; 
+0

Вы правы. Я забыл использовать скобки. Вместо этого я использовал назначение (x = y) непосредственно в качестве параметра. Благодаря! – RolandK

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