延长静态方法使用JUnit我所有的亚军类实现一个标注有爪哇 - 允许在子类
@BeforeClass
public static void setUp() throws Exception {}
有很多共同的代码的方法。
我想创建一个基本运行器,它将保存所有基本代码,并允许子类添加更多功能。
这完全是静态的。最佳做法是什么?
延长静态方法使用JUnit我所有的亚军类实现一个标注有爪哇 - 允许在子类
@BeforeClass
public static void setUp() throws Exception {}
有很多共同的代码的方法。
我想创建一个基本运行器,它将保存所有基本代码,并允许子类添加更多功能。
这完全是静态的。最佳做法是什么?
如上所述;静态不存在“压倒一切”;当然:静态本身...通常表明“需要改进设计”。每个正在编写严格的单元测试的人都知道,静态的东西可以让单元测试成为一场夜生活。所以我们在生产代码中避免使用静态。但是,在我们的测试代码中,我们只是使用它?!
更进一步:有人声称继承不是一个很好的答案,“我在我的单元测试中有很多通用代码”。
例如参见here。
你应该重新考虑你的设计。 @BeforeClass
注释旨在指定必须为所有测试运行一次的代码。如果重复使用@BeforeClass
注释的多个static
方法中的相同代码,换句话说,多次执行相同的操作,则表明它不是您想要的@BeforeClass
语义。
也许你只是想实例方法注解为@Before
否则,如果它的的确确是一个时间的动作,只是把static
方法与@BeforeClass
标记信息的基类,就大功告成了。子类的初始化意味着基类的初始化。对于全部子类,基类的初始化只会发生一次,但这就是@BeforeClass
的全部内容。如上所述,如果您想为每个子类或每个测试一次初始化,则更有可能是您想要的功能@Before
。
还要注意,你可以在基类中有static
方法的代码,只有在子类调用它时才会执行。只需将代码放入方法而不需要@BeforeClass
注释。然后,具有注释的子类中的方法可以调用基类的方法。这里不需要重写关系。
您可以将通用代码移动到规则并在每次测试中重复使用该规则:https://github.com/junit-team/junit/wiki/Rules