【问题标题】:Junit how to get invoking classname in parent @BeforeClass method?Junit如何在父@BeforeClass方法中调用类名?
【发布时间】:2018-09-19 09:35:09
【问题描述】:

我已经实现了一个通用的TestBase.java 并且许多测试用例类扩展了这个基础。

@BeforeClass方法是为对应的测试用例类准备一些具体的数据。

我的问题是,是否可以在 TestBase @BeforeClass 方法中获取调用测试用例类名,以便我可以使用类名来准备正确的数据?

我不想在单独的测试用例类中实现@BeforeClass,因为步骤完全相同,唯一的区别是可以通过测试用例类名生成的数据名称。

例如: 我的项目是测试我们产品的查询功能。 测试用例类,如 GenericQueryTest.java、BooleanQueryTest.java 等。 每个测试用例类需要在运行测试之前索引准备好的数据,并在测试用例类中的所有测试完成后清理环境。

我实现了一个 TestBase.java,如下所示。

公共类 TestBase {

@BeforeClass
public static void setUpBeforeClass() throws Exception {
    I want to get invoked test case class name here. if I get the name(eg. classname= "GenericQueryTest ")
    File testDataFile = new File("C:/users/" + classname +".csv";
    then read the "C:/users/GenericQueryTest.csv "to prepare data in env        

}

公共类 GenericQueryTest 扩展 TestBase{

 I donot need to implement @BeforeClass

 @Test 
 .....
 @Test
 ...

}

【问题讨论】:

  • 郑重声明:小心使用大量继承和 JUnit 测试用例的“幕后”设置。失败测试的目的是快速让您找到根本原因并加以解决。当您首先必须研究测试课程的“隐藏”方面时,您就违背了这个目的。含义:要非常小心地增加测试用例的复杂性,这需要读者在 了解测试用例在做什么之前转到 2、3 个不同的地方。
  • 只是prepareData的常用方法。对于避免在每个测试用例类中实现相同的方法,您有什么建议?
  • 该方法到底在做什么?除此之外,是的,我可能会将 BeforeClass 方法放入每个类中。您可以从那里调用其他一些静态辅助方法,将类名作为参数。但同样,您可能应该向我们展示一个代码示例,而不是提供抽象描述。鉴于当前信息,我们无法建议不同的选项。
  • 澄清了我上面的问题。

标签: junit junit4


【解决方案1】:

我想出了如何解决这个问题。只需实现定制的跑步者。你可以从 runner 那里得到 Class。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 2018-09-09
    • 2012-10-08
    • 2013-02-04
    • 2020-01-14
    相关资源
    最近更新 更多