gpt4 book ai didi

java - Junit 测试用例中的代码可重用性

转载 作者:行者123 更新时间:2023-11-30 10:37:48 25 4
gpt4 key购买 nike

public abstract class BaseTest {

protected static HiveTable hiveTable1 = null;
protected static HiveTable hiveTable2 = null;

@Test
public void testHiveMetadata() throws DataConnectorException {
Assert.assertFalse(hiveTable1.exists());
hiveTable1.create();
Assert.assertTrue(hiveTable1.exists());
putRecords(hiveTable1);
Assert.assertEquals(3, hiveTable1.getRecordCount());

Assert.assertFalse(hiveTable2.exists());
hiveTable2.create();
Assert.assertTrue(hiveTable2.exists());
Assert.assertEquals(0, hiveTable2.getRecordCount());

//more code
}
}


public class SomeTest1 extends BaseTest {

@BeforeClass
public static void setUpBeforeClass() throws DataConnectorException {

hiveTable1 = HiveDatasources.getLocalHiveTable1();
hiveTable2 = HiveDatasources.getLocalHiveTable2();
}
}

基本上,abstractBaseTest 具有核心测试逻辑,其他类如 SomeTest1 正在填充 abstract 中所需的对象> 类。

SomeTest2SomeTest3 和其他一些使用不同类型的 hiveTable 对象进行测试的类(例如具有不同文件格式的 hive 表) .

根据我的理解,当我mvn clean install 我的项目时,只有具体类的测试用例会运行。

这样解决问题的方法是正确的吗?

最佳答案

我的建议完全不同:考虑在此处使用继承时要非常小心,以避免代码重复。

您知道,单元测试的要点是:它们应该帮助您快速识别生产代码中错误的根本原因(收听 here 了解有关该主题的一些想法)。

这意味着:单元测试的核心质量是您尽快从失败消息中找到问题的核心。任何额外的抽象层......都会减慢你的速度。意思是:在你的设置中,当测试失败时,你必须明白这一点

  1. Ups,你被告知测试失败的类中实际上没有 @Test 方法
  2. 所以你要弄清楚:啊,它是在某个基类中定义的
  3. 然后你开始阅读那里......想出:“哦,事情是如何设置的?!
  4. 回到失败的测试课

也许在创建此代码后的前两周内这不是问题。但是 2 年后会发生什么,当新人加入你的团队时;你出去了;然后其中一个测试失败了?!

我的想法是:不要使用继承,而是使用组合。含义:创建一个提供“测试助手”方法的助手类;然后允许一些代码重复,并按顺序为 所有 您的 SomeTest 类提供字段和测试方法以完成测试工作。

最后,您应该绝对更改的一件事:您的一个测试方法中有多个断言。最好推出它并进行多项测试,每个测试最多做一次一个断言。

关于java - Junit 测试用例中的代码可重用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40003054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com