2011-06-14 178 views
2

我正在开发单元测试,在创建测试数据时可以从很多重用性中受益。但是,我需要对相同的测试数据(API参数)做不同的事情(API调用)。Java方法别名

我想知道下面的习语在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)是不可能的,但我会很乐意被纠正或者如果任何人都可以提出可能的设计方案来实现这种效果。

顺便说一句,我知道命令模式来完成这件事。但不是我在找什么。

谢谢, 美国就可以实现这个

回答

1

一种方式是通过使用intefaces: -

  1. 修改runScenario()方法接受该接口作为参数。
  2. 为每个场景类型实现接口并传递场景测试所需的接口。

如果您已经不知道它,通常使用jUnit来完成java中的单元测试。有很多教程可用,其中一个可以找到here

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

不,你不能在Java中这样做。没有lambda支持(不要屏住呼吸......)。你可以在Scala中做到这一点,例如使用ScalaTest。可能还有其他一些JVM语言。
在Java中,成语是用匿名类包装这些函数,可能实现了定义要运行的方法的接口。

+0

感谢。虽然不是一个解决方案,但我认为你更好地描述了问题本身 - lambda支持。 Java没有方法引用或函数类型(尚)的概念。我想知道是否有一个更简洁的替代方案,而不必建立大量的锅炉代码 - 例如您建议的标准替代方案(匿名类/接口)。 非常感谢。 – USQ 2011-06-14 23:47:31

+0

那么,匿名类*是一个解决方案......我只是没有给出代码,因为它很明显。 Java很冗长,喜欢用锅炉代码......(或者至少很难避免它)。我看到的其他解决方案,如使用库(单元测试框架)功能,是很好的解决方法。 – PhiLho 2011-06-15 05:53:20

1

我不知道要完全得到你所需要的,但在我看来,您可以使用该DataProvider提供TestNG

是这样的:

... 
@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插件

+0

+1:不确定这是OP寻找的内容,但它是一个内容丰富的文章,很可能是OP正在寻找的内容。 – CoolBeans 2011-06-14 22:49:29

+0

我既不:P我希望这有助于反正。 :) – OscarRyz 2011-06-14 22:50:48