【问题标题】:Test Data structure for Tests to improve test readability用于测试的测试数据结构以提高测试的可读性
【发布时间】:2021-01-10 19:06:47
【问题描述】:

我有一个与测试数据和测试类结构有关的问题。 我有一个测试类,里面的测试很少。 现在,给定和预期的数据是我为几乎每个测试创建的结构。 我写我的测试看起来像这样:

    private static final List<String> EXPECTED_DATA = List.of("a","b","c","d","e","f");
    @Test
    void shouldReturnAttributes() {
        Service service = new Service();
        List<String> actualData = service.doSomething();

        assertThat(actualData).containsExactlyInAnyOrderElementsOf(TestData.EXPECTED_DATA);
    }

目前,我将测试类开头的测试数据设置为常量。 一旦添加了更多测试,更多常量开始出现在测试类的开头,导致大量向下滚动以到达实际测试。 于是,一个朋友想出了一个主意,如果常量不在测试类的顶部,那么测试的可读性会更好。 来自多个测试类的测试数据被移动到一个 CommonTestData 类,而仅来自特定类的其余测试数据我们将它们构造如下。

我们将它们移动到私有静态类 TestData 中,代码如下所示:

class ProductAttributeServiceTest {
@Test
    void shouldReturnAttributes() {
        Service service = new Service();
        List<String> actualData = service.doSomething();

        assertThat(actualData).containsExactlyInAnyOrderElementsOf(EXPECTED_DATA);
    }
    
    private static class TestData {
        private static final List<String> EXPECTED_DATA = List.of("a","b","c","d","e","f");
    }
}

您能提出另一种方法吗? 您如何构建测试数据以提高测试的可读性?

【问题讨论】:

    标签: java junit test-data


    【解决方案1】:

    一种方法可以将测试数据放在文本、csv 类型的文件中..

    将测试数据放入文件中可以为具有特定测试场景的文件命名。这最终将增加测试数据的可读性。 这些文件也可以安排在基于测试场景的文件夹结构中。

    一旦测试数据被安排在文件中,这些文件的所有权和维护就可以转移给领域专家,并且可以根据需要直接添加/修改测试数据。

    可以创建一个测试数据提供者类,该类将执行从文件中读取测试数据并提供给测试的任务。

    因此,测试只能通过 API 与该供应商类进行通信,例如,

    公共字符串getTestData(字符串测试场景名称)

    如果每个常量的测试数据没有那么大,无法放入单独的文件中。那么一个基于 json yml 的配置文件,每个数据常量都有一个字段。

    【讨论】:

    • 感谢您的回复。这是一种干净的方法,但它可能会影响测试执行时间,对吧?
    • 是的,它可能会增加一点性能成本。然而,由于我们创建和维护测试也是为了记录文档,因此宁愿清洁而不是牺牲一点性能是不错的选择。
    猜你喜欢
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    相关资源
    最近更新 更多