使属性赋值成为Action

时间:2012-05-30 16:13:33

标签: c#

只是一个例子:我有一个对设置属性做出反应的类。更具体地说,有三个属性,一旦它们全部被设置,就从中加载一个程序集。之后会触发一个事件。

我对这种行为的单元测试看起来像这样:

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();
}

不幸的是,我无法将属性赋值设为Action。

所以,我想知道,你能以某种方式将作业“转化”为行动吗?或者可能有不同的方式来抽象代码?

1 个答案:

答案 0 :(得分:2)

当你说你不能将财产分配作为行动时,你是什么意思?
你不能实施行动中的任务?
为什么你不能使用

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

如果您想使用委托,可以使用Funct&lt;&gt;代表:

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