只是一个例子:我有一个对设置属性做出反应的类。更具体地说,有三个属性,一旦它们全部被设置,就从中加载一个程序集。之后会触发一个事件。
我对这种行为的单元测试看起来像这样:
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。
所以,我想知道,你能以某种方式将作业“转化”为行动吗?或者可能有不同的方式来抽象代码?
答案 0 :(得分:2)
当你说你不能将财产分配作为行动时,你是什么意思?
你不能实施行动中的任务?
为什么你不能使用
Action<loader> action =(loader)=>loader.Type="someType";
如果您想使用委托,可以使用Funct&lt;&gt;代表:
Func<string> funct = ()=>"someType";