Java方法别名

| 我正在开发单元测试,在创建测试数据时,可以从可重用性中受益匪浅。但是,对于相同的测试数据(API参数),我需要做不同的事情(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)是不可能的,但我很乐意予以纠正,或者如果有人可以提出可能的设计替代方案来实现此效果,我将非常高兴。 顺便说一句,我知道命令模式可以做到这一点。但不是我想要的。 谢谢, 我们     
已邀请:
         使用jUnit。 将a,b和c转换为字段。 使用jUnit的
setUp
tearDown
方法初始化每个测试的新对象。     
        不,您不能在Java中做到这一点。没有lambda支持(不要屏住呼吸...)。您可以在Scala中执行此操作,例如使用ScalaTest。可能还有其他一些JVM语言。 在Java中,习惯用法是用匿名类包装这些函数,也许实现一个定义要运行的方法的接口。     
        实现此目的的一种方法是使用界面: 修改“ 4”方法以接受该接口作为参数。 为每种场景类型实现接口,并通过场景测试所需的接口。 通常,如果您还不了解Java,则可以使用jUnit完成Java中的单元测试。有许多可用的教程,可以在这里找到这样的教程。     
        我不确定要得到什么,但是在我看来您可以使用TestNG提供的provides5ѭ。 是这样的:
...
@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 顺便说一句:TestNG作为Intellj IDEA的插件包含在内     

要回复问题请先登录注册