Java方法别名

时间:2011-06-14 21:58:21

标签: java methods alias

我正在开发单元测试,在创建测试数据时可以从可重用性中获益很多。但是,我需要对相同的测试数据(API args)执行不同的操作(API调用)。

我想知道Java中是否可以使用以下习语。

Class RunTestScenarios {

void runScenarioOne (A a, B b, C c) {
   ........
}

void runScenarioTwo (A a, B b, C c) {
   ........
}

void runScenario (/* The scenario */  scenarioXXX) {
     A a = createTestDataA();
     B b = createTestDataB();
     C c = createTestDataC();
     scenarioXXX(a, b, c);
}

public static void main (String[] args) {
    runScenario(runScenarioOne);
    runScenario(runScenarioTwo);
}

}

基本上,我不希望在任何地方重复以下内容:

 A a = createTestDataA();
 B b = createTestDataB();
 C c = createTestDataC();

据我所知,这样的别名(scenarioXXX)是不可能的,但我很乐意纠正,或者是否有人可以提出可能的设计方案来实现这种效果。

顺便说一句,我知道命令模式可以完成这项工作。但不是我要找的东西。

谢谢, US

4 个答案:

答案 0 :(得分:2)

  1. 使用jUnit。
  2. 转换a,b& c到田地。
  3. 使用jUnit的setUptearDown方法为每个测试初始化​​新鲜对象。

答案 1 :(得分:1)

您可以通过使用接口来实现此目的: -

  1. 修改runScenario()方法以接受该接口作为参数。
  2. 为每种方案类型实现接口,并传递方案测试所需的接口。
  3. 如果你已经不知道它,通常使用jUnit来完成java中的单元测试。有很多可用的教程,可以找到一个here

答案 2 :(得分:1)

不,你不能用Java做到这一点。不是没有lambda支持(不要屏住呼吸......)。您可以在Scala中执行此操作,例如使用ScalaTest。可能还有一些其他JVM语言 在Java中,习惯用异步类包装这些函数,可能实现一个定义要运行的方法的接口。

答案 3 :(得分:1)

我不确定能得到你需要的东西,但在我看来,你可以使用TestNG提供的DataProvider

是这样的:

...
@Test(dataProvider="someMethodWithDataProviderAnnotation") 
void runScenarioOne (A a, B b, C c) {
...
}

@Test(dataProvider="someMethodWithDataProviderAnnotation") 
void runScenarioTwo (A a, B b, C c) {
...
}

然后你就是你的数据提供者:

@DataProvider(name="someMethodWithDataProviderAnnotation")
private Object [][] getTestData() {
   return new Object[]][] {{
         createTestDataA(),
         createTestDataB(),
         createTestDataC()
   }};
 } 

就是这样,当你运行测试时,将使用正确的参数调用它们,这些参数只会创建一次。虽然这必须加载大量资源(例如,目录中的所有文件或类似内容)时更有用。

您只需运行课程中的所有方法。

在这里阅读更多内容:

http://testng.org/doc/documentation-main.html#parameters-dataproviders

BTW:TestNG作为插件包含在Intellj IDEA