2015-07-01 73 views
0

延长静态方法使用JUnit我所有的亚军类实现一个标注有爪哇 - 允许在子类

@BeforeClass 
public static void setUp() throws Exception {} 

有很多共同的代码的方法。

我想创建一个基本运行器,它将保存所有基本代码,并允许子类添加更多功能。

这完全是静态的。最佳做法是什么?

回答

0

如上所述;静态不存在“压倒一切”;当然:静态本身...通常表明“需要改进设计”。每个正在编写严格的单元测试的人都知道,静态的东西可以让单元测试成为一场夜生活。所以我们在生产代码中避免使用静态。但是,在我们的测试代码中,我们只是使用它?!

更进一步:有人声称继承不是一个很好的答案,“我在我的单元测试中有很多通用代码”。

例如参见here

1

你应该重新考虑你的设计。 @BeforeClass注释旨在指定必须为所有测试运行一次的代码。如果重复使用@BeforeClass注释的多个static方法中的相同代码,换句话说,多次执行相同的操作,则表明它不是您想要的@BeforeClass语义。

也许你只是想实例方法注解为@Before

否则,如果它的的确确是一个时间的动作,只是把static方法与@BeforeClass标记信息的基类,就大功告成了。子类的初始化意味着基类的初始化。对于全部子类,基类的初始化只会发生一次,但这就是@BeforeClass的全部内容。如上所述,如果您想为每个子类或每个测试一次初始化,则更有可能是您想要的功能@Before

还要注意,你可以在基类中有static方法的代码,只有在子类调用它时才会执行。只需将代码放入方法而不需要@BeforeClass注释。然后,具有注释的子类中的方法可以调用基类的方法。这里不需要重写关系。