JUnit @Rule 生命周期与 @Before 交互

2024-03-19

我有一些 JUnit 测试使用TemporaryFolder @Rule。他们使用TemporaryFolder in a @Before执行一些设置的方法:

@Rule
public TemporaryFolder folder = new TemporaryFolder();

@Before
public void init() {
  folder.newFile("my-file.txt");
}

@Test
public void myTest() { ... }

大多数时候这都可以完美地工作。然而,当使用SpringJUnit4ClassRunner我发现在某些情况下init()方法在之前被调用Statement在我的里面TemporaryFolder应用实例。因此,临时文件夹位置未设置(即:null) when folder用在init()我的文件最终位于工作目录中,而不是/tmp.

所以在某些情况下@Before方法在规则之前执行,但是,我无法建立明确的模式。我偶尔会在我自己的一些规则实现中看到类似的问题。

有什么方法可以确保我的规则语句在任何设置方法之前应用?


在 JUnit 4.10 中,BlockJUnit4ClassRunner(SpringJUnit4ClassRunner 的超类)似乎很注意构造语句链,使得规则在任何 @Before 方法之前运行。从 JUnit 4.10 开始:

protected Statement methodBlock(FrameworkMethod method) {
    // ...
    Statement statement= methodInvoker(method, test);
    statement= possiblyExpectingExceptions(method, test, statement);
    statement= withPotentialTimeout(method, test, statement);
    statement= withBefores(method, test, statement);
    statement= withAfters(method, test, statement);
    statement= withRules(method, test, statement);
    return statement;
}

JUnit 4.7 似乎以不同的顺序将语句链缝合在一起:

Statement statement= methodInvoker(method, test);
statement= possiblyExpectingExceptions(method, test, statement);
statement= withPotentialTimeout(method, test, statement);
statement= withRules(method, test, statement);
statement= withBefores(method, test, statement);
statement= withAfters(method, test, statement);
return statement;

spring-test-3.0.5 的父 POM 似乎表明它依赖于 JUnit 4.7。我想知道让它使用更新的 JUnit 是否会有帮助?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JUnit @Rule 生命周期与 @Before 交互 的相关文章

随机推荐

  • “docker-compose”命令设置 docker-compose.yml 文件的路径

    阅读帮助docker compose h or 这份官方手册 https docs docker com compose reference overview command options overview and help 会给我们选择
  • 尝试在空对象引用上调用虚拟方法“void android.widget.ListView.setAdapter(android.widget.ListAdapter)”[重复]

    这个问题在这里已经有答案了 我正在尝试在列表视图中显示数据 我当前的代码尝试获取从 myDatabase 类传入的数组 然后在我的 listView 中显示它 但是我得到了一个错误 尝试在空对象引用上调用虚拟方法 void android
  • 如何使用云功能从Firestore删除数据

    我正在结合谷歌的 Firestore 数据库编写云函数 我正在尝试编写递归删除更多数据 我找不到访问和删除数据库其他部分中的数据的语法 我已有的代码如下 exports deleteProject functions firestore d
  • Doctrine2 ,通过多对多属性的计数获取实体顺序

    我有两个实体 Article User 文章与名为 likedByUsers 的用户相关 现在 我想按喜欢的数量排序文章 但是 我不想拥有 numberOfLikes 属性 因为更新它太麻烦了 我有太多文章 100k 无法在 PHP 端进行
  • 如何在c中给蒙版上色

    如何对红色 绿色和蓝色值的 32 位无符号整数进行颜色掩码 是这样的吗 要遮盖的颜色 gt gt 8 这应该会得到你想要的结果 short red color gt gt 16 0xFF short green color gt gt 8
  • 如何在javascript中将pdf文件上传到s3?

    我需要将 pdf 文件从 UI 用 Javascript 编写 上传到 Amazon S3 但我正在尝试将该文件上传到 S3 我收到一些 unicode 格式文本 当我将该文本复制到记事本时 或者说任何其他文本文本编辑器我可以人类可读的文本
  • AutoMapper:“忽略其余的”?

    有没有办法告诉 AutoMapper 忽略除了显式映射的属性之外的所有属性 我有外部 DTO 类 这些类可能会从外部发生更改 并且我希望避免显式指定要忽略的每个属性 因为在尝试将它们映射到我自己的对象中时添加新属性会破坏功能 导致异常 据我
  • MySQL触发器将字段更新为id的值

    我想要一个触发器来对插入的记录执行以下操作 pseudocode if new group id is null set new group id new id else don t touch it end 更清楚地说 假设我有一张包含三
  • 更改连接字符串并在运行时重新加载 app.config

    当我使用此代码更改连接字符串时 它不会重新加载app config在运行时 我希望它能够像我们重新加载一样重新加载app config config ConnectionStrings ConnectionStrings JVVNL NEW
  • Tensorflow 对象检测:ImportError:没有名为 nets 的模块

    我目前正在尝试在 Windows 7 上安装 tensorflow 对象检测应用程序 雇主要求 但距离最后几个步骤都失败了 基本上 当我运行安装测试命令时 出现以下错误 导入错误 没有名为 nets 的模块 我读过一些关于这个主题的解决方案
  • 计算并生成完全平方数

    我需要一些关于如何编写 Python 程序的建议 该程序以列表格式提供前 n 个完全平方数的列表 输出应如下所示 How many squares 5 1 4 9 16 25 这是我到目前为止所拥有的 n int raw input How
  • 如何在 WPF 4.0 中创建发光的 TextBox?

    我正在尝试创建一个文本框 当聚焦时它会发光 到目前为止我看到的所有如何执行此操作的示例都基于外发光位图效果 http msdn microsoft com en us library ms752037 28v vs 90 29 aspx 而
  • 配置更改后通知DataSetChanged

    我正在更改设备配置 更改语言 方向等 后进行一些测试 我注意到在此之后 方法 notifyDataSetChanged 不起作用 动作示例 每次我执行删除 保存等操作时 我都会调用 updateList 当我更改方向或更改方向时 用户单击删
  • 值对象模式和数据传输模式之间的区别

    在什么场景下我可以在n层架构中使用这些设计模式 DTO 是您可以在以下位置使用的对象边界系统的 例如 当您有 SOAP Web 服务并且想要返回响应时 您可以使用 DTO 它比必须通过网络返回的实际 XML 更容易处理 DTO 通常由工具生
  • 如何在超时的情况下迭代异步迭代器?

    我觉得用代码更容易理解 try async for item in timeout something timeout 60 await do something useful item except asyncio futures Tim
  • 使用“dotnet build”输出作为“dotnetpublish”输入

    I use dotnet build o somedir 我该如何做后续dotnet publish使用中的工件 somedir 文档不充分 包含 MSBuild 逻辑的 xml 文件简直就是地狱 我什至试图把头撞到桌子上 但没有帮助 您可
  • 在数据库中存储长整型日期是 Java 最佳实践吗?

    我这样做的原因是 在任何数据库中存储为日期对象的日期往往以特定格式编写 这可能与您需要在前端向用户呈现的内容有很大不同 我还认为 如果您的应用程序从不同类型的数据存储中提取信息 这会特别有用 一个很好的例子是 MongoDB 和 SQL 日
  • 无法更新命令行工具,因为 Xcode 告诉我无权访问它们

    我正在使用 Xcode 4 3 2 它尝试安装命令行工具的更新 我点击了更新按钮 Xcode 告诉我 my apple id does not have access to Command Line Tools Contact Apple
  • 自定义布局,使其内容圆角

    我想创建一个通用的 ViewGroup 然后可以在 XML 布局中重用它来圆化放入其中的任何内容的角 因为某些原因canvas clipPath 似乎没有效果 我究竟做错了什么 这是Java代码 package rounded import
  • JUnit @Rule 生命周期与 @Before 交互

    我有一些 JUnit 测试使用TemporaryFolder Rule 他们使用TemporaryFolder in a Before执行一些设置的方法 Rule public TemporaryFolder folder new Temp