改变类调用常用方法

时间:2016-09-06 02:58:02

标签: java class selenium methods

热烈祝愿所有的倡导者,

在尝试允许各种类调用公共类来调用常用方法时,我遇到了一个微不足道的问题。

我有一个名为CommonLogin的类执行登录操作,我还有一个类TestA,它将调用CommonLogin类,运行登录操作,然后返回到TestA继续执行。返回TestA的方法是TestA.runTest(testcase,url)CommonLogin

但是,类TestA只是调用CommonLogin类以运行相同登录功能的众多类之一。我的问题是我希望将TestA.runTest(testcase,url)中的类名作为变量,但保留方法runTest。期望的结果如下:

classname.runTest(testcase, url); ==> CommonFunction

中代码中的初始语法

如果执行了类TestA,则上述语法将被指定为
TestA.runTest(testcase, url);

在第二轮执行期间,执行了一个名为TestB的类,这将指定上述语法 TestB.runTest(testcase, url);

使用语法classname.runTest(testcase, url)的原因是允许对CommonLogin类的不同类调用来运行runTest方法。

目前,在我的CommonLogin类中,我正在使用if-else if语句,如果TestA类正在调用,则运行常用的Login操作,然后运行TestA.runTest(testcase, url) 。如果正在调用TestB类,则运行常用的Login操作,然后运行TestB.runTest(testcase, url);。通过这种方式,我的代码包含两个登录操作的chucnks,只是它调用了不同的方法。如果TestC,D,E等进来,我会有很多Login操作的副本,我试图避免。

提前感谢您的建议。

1 个答案:

答案 0 :(得分:0)

使用类作为变量可以使用.class和反射来完成;您的登录方法可以使用反射在您的类中搜索runTest方法并执行该方法。但是,这比你需要的更复杂。

假设您正在使用Java 8(我希望如此,因为Java 7已经过了生命周期终止),我认为最好的方法是提供一个方法参考作为参数来运行方法考试。测试方法可能需要两个参数,而不会返回结果。 Java已经为此目的定义了许多内置接口。见http://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html。你可能想要的是BiConsumer,它接受​​两个参数并且不产生结果。所以你的登录方法可能如下:

public ..whatever.. login(...other parameters..., BiConsumer<TestCase, String> testMethod) { ... }

我不知道&#34; testcase&#34;你指的是;用适当的东西替换TestCase。现在,在您的登录方法中,您可以像这样调用测试(假设testCaseTestCase):

testMethod.accept(testCase, url);

acceptBiConsumer中接口方法的名称。 (该包中的其他类使用不同的方法名称,例如apply。)

当您调用login方法时,假设您的类声明了runTest方法:

public void runTest(TestCase testCase, String url) { ... }

您可以像这样调用登录方法:

CommonLogin.login(....., this::runTest);

传递对runTest的引用,该引用将在&#34;&#34;宾语。但是,如果runTest是静态的,您可以这样称呼它:

CommonLogin.login(....., TestA::runTest);

无论哪种方式,您都会传递对方法的引用,login会在调用testMethod.accept时调用该方法。

(请注意,当您执行此操作时,该方法不必命名为runTest。)