【问题标题】:How do I create a template Junit 5 test in a library that others can just reference with test data?如何在库中创建模板 Junit 5 测试,其他人只能通过测试数据引用该模板?
【发布时间】:2023-02-15 18:04:43
【问题描述】:

我想创建某种类型的测试模板,其他人可以只向其提供一组简单的数据并运行一组复杂的测试。

在我的例子中,我想测试数据库中的数据迁移,并想设置如何测试,我的测试用户应该只添加某种类型的数据。到目前为止,我的想法是这样的:

我有一个对象,其中包含旧格式和新格式的数据(以及要应用于它的迁移类)。这是我的图书馆的用户应该提供的参数。然后我有一个库,其中包含有关如何正确测试以及要运行哪些测试的所有代码。

基本上,我希望用户创建一个提供数据的方法,而不是测试代码。

我看到了一个解决方案,您可以扩展包含所有测试用例的类,并且只覆盖它们用作 @MethodSource 的方法,但不知何故,这感觉不是最好的解决方案,所以我正在寻找其他看起来“更干净”的建议”。

【问题讨论】:

    标签: junit5


    【解决方案1】:

    一种选择是查看JUnit5 Dynamic Tests,因为它更倾向于组合而不是继承。

    你可以有一个生成测试套件的类,比如

    public final class SharedTest {
      public static Collection<DynamicTest> getTestSuite(Bridge bridge) {
        List<DynamicTest> tests = new ArrayList<>();
        tests.add(
            dynamicTest(
                "canPerformAction",
                () -> {
                  bridge.performAction();
                  assertTrue(bridge.wasSuccess());
                }));
        // etc...
        return tests;
      }
    }
    

    Bridge 是一个将共享测试套件与具体目标测试套件分离的接口。

    要将其连接到目标测试中,您需要

    class MyTest {
      @TestFactory
      Collection<DynamicTest> getTestSuite() {
        return SharedTest.getTestSuite(new Bridge() {
          @Override
          public void performAction() {
            // concrete implementation
          }
    
          // etc...
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      • 2017-06-23
      • 2013-04-22
      • 2016-05-15
      相关资源
      最近更新 更多