【问题标题】:Clean up static resource in a test method in Xunit UnitTests在 Xunit UnitTests 的测试方法中清理静态资源
【发布时间】:2016-01-13 21:25:35
【问题描述】:

我在 C# 环境中使用 Xunit 进行单元测试。 我有一些静态资源,例如静态缓存,我测试的一些方法依赖于该静态缓存。 在我的单元测试中,我根据需要修改这个静态缓存,并检查我的方法的行为是否发生了相应的变化。在测试结束时,我清理了我的静态缓存,这样其他单元测试就不会受到影响。

当我并行运行所有单元测试时,问题就开始了。 依赖于静态缓存的多个单元测试同时运行,导致测试不稳定(一次成功,另一次失败)。

如何使这些特定测试同步运行?或任何其他使清理工作的解决方案

谢谢!

【问题讨论】:

  • 简单但可能没有帮助的答案是“不要使用静态资源”。您已经发现了必须始终避免静态可变状态的关键原因之一。

标签: c# unit-testing xunit.net


【解决方案1】:

您的代码不是线程安全的,不能容忍并行运行,因此当您对它们进行并行单元测试时,它不会工作(这是预期的)。

有两种可能的解决方案:

  • 不要使用静态资源
  • 不要并行运行测试

【讨论】:

  • 代码是线程安全的。两种方法同时将广告移除成功添加到静态缓存中。
  • 维基百科:如果一段代码只以保证多个线程同时安全执行的方式操作共享数据结构,那么它就是线程安全的。看看你的问题,我想说这里不是这样,因为它有时会失败,有时不会
  • 我明白了。你知道任何解决方法吗?诸如嘲笑静态资源或使测试以其他人必须等待完成的方式运行。
  • 不并行运行你的测试 :-) 如果不是这样,我想说,我的第一个建议是:不要使用静态资源(或重构它们,以便你可以在测试中模拟它们)
  • 不,因为单例仍然只是静态资源的前端。您必须真正使其成为非静态资源(当您不测试时,如果您仍然坚持将其设为静态,则可以将静态资源注入其中)
猜你喜欢
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-04
  • 1970-01-01
  • 2017-04-27
相关资源
最近更新 更多