我试图为Selenium测试编写一个包装器,如果测试失败,重新运行测试,我的机制工作正常。但我需要找出一种方法来传递函数/方法或(最好)函数内部的多个方法。这是我想要实现的一个例子:
在包装器类中:
public class TestRunner{
public void RunTest(function FuncToRun){
FuncToRun();
}
}
在测试中:
public class Tests{
public void Test(){
...Run test methods...
}
TestRunner.RunTest(Test());
}
这纯粹是为了演示。我知道这不起作用,但我希望它会向我表达我的观点。
答案 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)
使用委托。只需声明要传递的方法的委托,然后调用并将方法分配给它。
答案 4 :(得分:0)
您可以使用委托甚至Action或Func对象。
public class TestRunner{
public void RunTest(Action funcAction){
funcAction();
}
}
public class Tests{
public void Test(){}
TestRunner.RunTest(Test);
}