当前位置: 首页 > 知识库问答 >
问题:

我可以混合使用JUnit3和JUnit4吗?

宦源
2023-03-14

我正在编写一些从第三方库扩展类的JUnit测试。超级类扩展了testcase,所以根据定义,我的子类也扩展了。

在我的子类中,我用前缀test编写测试方法,然后执行这些方法。

但是,出于许多原因,我们希望转移到JUnit4(其中一个原因是,我们不希望必须在测试方法前缀test)

我尝试过使用JUnit4@test注释简单地编写新测试,但这些方法没有得到执行。
例如:

public abstract class UtilityClassFromThirdPartyLibrary extends TestCase {

}

public class MyTestClass extends UtilityClassFromThirdPartyLibrary {

    public void testThisMethodIsInvokedBecauseItStartsWithTest {
    }

    @Test
    public void thisMethodDoesNotGetInvoked {
    }
}

不扩展第三方测试类不是一个选项。(值得注意的是,Spring的AbstractXMLFlowExecutionTests又扩展了其他Spring类,这些类最终扩展了TestCase。超级类中的方法提供了太多的设置和样板,如果不将这些简单地扩展到使用JUnit4会产生相反的效果)

如前所述,我们使用JUnit4的@test注释的动机之一是,它允许我们更好地为方法命名。我们的观点是test这个词是多余的,因为这个类显然是一个测试类,并且这个方法是用@test注释的。我们用BDD风格编写测试,因此我们的测试方法名称描述了被测试单元应该做什么--我们的命名约定是public void shouldDoSomething()

有人知道是否可以将扩展JUnit 3的TestCase的'n'match测试类与使用JUnit 4的@test的方法混合使用吗?如果可以,如何使用?

谢谢
内森

共有1个答案

裴曜灿
2023-03-14

JUnit4样式测试不应直接或间接扩展junit.framework.testcase。如果这样做,您经常会得到令人困惑的行为(@rule注释的字段被忽略,测试失败,因为基类方法没有被JUnit调用,等等)。测试可以以JUnit4样式或JUnit3样式运行,具体取决于它们的运行方式。

您的选择是要么坚持使用JUnit3,要么说服基类的维护者创建支持JUnit4的类(规则、运行器等)。

 类似资料:
  • 我正在使用jUnit为访问数据库的应用程序管理集成测试。因为设置测试数据是一个耗时的操作,所以我一直在使用方法,它只在每个测试类中执行一次(而不是方法,它在每个测试方法中运行一次)。 现在,我想尝试数据层配置的几种不同排列,在每个不同的配置上运行我的所有测试。这似乎是测试运行程序的自然使用。问题是,向类构造函数提供参数,方法是抽象的,在类构造函数之前被调用。 几个问题, 是否为每个参数排列调用方法

  • 我使用Spring Boot和Spring Data JPA和Hibernate作为持久性提供程序。我已经使用扩展了我的接口。我有一个表的实体Bean列表。其中一些已经存在,一些不存在。 我想知道当我从我的服务层调用saveAll并传递此列表时会发生什么?

  • 问题内容: 我已经搜索过网络,到目前为止,我所看到的是您可以一起使用和含义: 要么 是有效的,但是当我使用此代码时,得到的是: 对于第一个,除了与相同。对于第二个。 问题是什么?我不能使用和在一起?还是正常?是我可以检查连接是否全部有效的方法吗?() 问题答案: 不,你不能使用和在一起。它们是独立的API,它们创建的资源彼此不兼容。 虽然有一个。

  • 是否可以使用来强制执行特定类型或字符串文本的存在? 示例: 或者它只是将PropTypes.bool视为它返回的任何字面值?在官方留档中找不到任何参考资料,所以我假设它不像我期望的那样工作。不过,这不会产生错误。

  • 我的经验主要是使用React Hooks 在一个新项目中,我必须使用React钩子 这很有效。 我的情况是这样的:我需要一个动作来创建一个“空”公司,所以没有必要创建一个动作创造者。因此,我创建了一个这样的行动: 对于Action Creator,我从内部调用它,如下所示: 对于这个动作,我想我可以用一种类似于我总是用上下文来称呼动作的方式来称呼它,比如: 不幸的是,我遇到了这个流错误:“无法从值

  • 我需要在 Mockito 中验证一个具有多个参数的方法,但只需要捕获一个参数,其他参数我只需要一个简单的匹配器。这可能吗? 例如,如果我有: 在这种情况下,我是否需要为每个参数编写一个捕获器,尽管我只需要捕获第一个参数?