【问题标题】:Does junit 4 have an equivalent of MbUnit's AssemblySetUp attribute? [duplicate]junit 4 是否具有等效于 MbUnit 的 AssemblySetUp 属性? [复制]
【发布时间】:2012-03-05 12:15:23
【问题描述】:

可能重复:
JUnit 4: Set up things in a test suite before tests are run (like a test's @BeforeClass method, just for a test suite)

我正在寻找在所有测试之前只调用一次的入口点,不仅仅是在一个类中,而是在同一个 jar 中的所有套件和类中

MbUnit(在 .NET 中)提供了 AssemblySetUp 属性,用于指定此类入口点。

如何使用 junit 4 在 java 中做到这一点?

【问题讨论】:

  • 就像配置网络仿真设备一样。相信,有很多用例。
  • 查看this answers 类似的问题。它给出了如何实现此行为的示例。
  • 我不是在质疑它的必要性,我只是要求一个具体的用例,以便我们了解问题。

标签: java junit


【解决方案1】:

我对这个问题的解决方案(昂贵的设置与某些测试相同)是使用带有 init 方法的 Setup-Class:

private static boolean initialized = false;

public static void init()
{
  if (initialized)
  {
    return;
  }

  //... do all the init stuff
  initialized = true;
}

缺点是你必须在每一个依赖于初始化的地方调用它。

您也可以编写自己的 TestRunner,它可以负责初始化。

【讨论】:

    【解决方案2】:

    查看文档,我没有看到任何简单的方法可以做到这一点。有@BeforeClass注解,每个类只运行一次。

    更好的解决方案可能是一些重构;在您的示例用例中,为什么有这么多类访问网络?如果您封装了该功能,并为所有其他测试用例模拟了它,您可以大大减少需要该设置的测试数量。

    编辑:没有什么比 2 年后回来再次回应更重要的了。您可以将您的网络设置放在它自己的类中,并让它跟踪它是否被调用(像private static final calledYet = false 这样简单),然后在@BeforeClass 方法中从所有测试用例中调用它,甚至有一个超类使用自己的 @BeforeClass 方法,您的所有测试用例都可以扩展。

    【讨论】:

    • 没有网络的网络仿真设备很难测试。
    猜你喜欢
    • 1970-01-01
    • 2012-08-26
    • 2021-12-04
    • 2012-07-18
    • 2014-04-09
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    相关资源
    最近更新 更多