C# - 如何在函数中传递和运行方法?

时间:2014-08-08 13:36:23

标签: c# function testing parameters wrapper

我试图为Selenium测试编写一个包装器,如果测试失败,重新运行测试,我的机制工作正常。但我需要找出一种方法来传递函数/方法或(最好)函数内部的多个方法。这是我想要实现的一个例子:

在包装器类中:

public class TestRunner{
    public void RunTest(function FuncToRun){
        FuncToRun();        
    }
}

在测试中:

public class Tests{
    public void Test(){
        ...Run test methods...
    }
TestRunner.RunTest(Test());
}

这纯粹是为了演示。我知道这不起作用,但我希望它会向我表达我的观点。

5 个答案:

答案 0 :(得分:2)

您可以使用Action参数执行此操作

public class TestRunner{
    public void RunTest(Action FuncToRun){
        FuncToRun();        
    }
}

public class Tests{
    public void Test(){
        ...Run test methods...
    }
    TestRunner.RunTest(() => Test());
}   

答案 1 :(得分:2)

看起来好像需要delegate

您的方案的适用委托是Action委托,可用于表示单个无参数方法。

public class TestRunner
{
    public void RunTests(params Action[] tests)
    {
        foreach (var test in tests)
        {
            test.Invoke();
        }
    }
}

请注意使用params关键字,这将允许您向RunTests方法提供任意数量的测试。以下是使用隐式方法组转换的示例:

public class Tests
{
    public void TestOne() {
    }

    public void TestTwo() {
    }
}

...
var runner = new TestRunner();
var tests = new Tests();
runner.RunTests(tests.TestOne, tests.TestTwo);

答案 2 :(得分:0)

你想做这样的事情。但是需要更多的上下文作为输入和你期望的回报值。

   Func<string, int> myMethodName

这是一个使用示例:

   public bool RunThisMethod(Func<string, int> myMethod)
    {
        //... do stuff
        int i = myMethod("My String");
        //... do more stuff
        return true;
    }

答案 3 :(得分:0)

使用委托。只需声明要传递的方法的委托,然后调用并将方法分配给它。

http://msdn.microsoft.com/en-IN/library/ms173171.aspx

答案 4 :(得分:0)

您可以使用委托甚至Action或Func对象。

public class TestRunner{
    public void RunTest(Action funcAction){
        funcAction();        
    }
}

public class Tests{
    public void Test(){}
    TestRunner.RunTest(Test);
}