【问题标题】:Static variable across tests in different test projects不同测试项目中跨测试的静态变量
【发布时间】:2016-06-30 18:39:23
【问题描述】:

我的 Visual Studio 解决方案中有 3 个项目:1 个共享库项目、1 个单元测试项目(主要是 Selenium WebDriver 测试)和 1 个编码的 UI 测试项目(我很难将我的单元测试和编码的 UI 测试结合到1 个项目 - 所以我们有 2)。我在名为 Globals.Status 的共享库项目中有一个具有静态属性的静态类。

我有一个测试用例,它需要在浏览器(Selenium 单元测试)和桌面应用程序(编码的 UI 测试)中完成工作。 Selenium 单元测试会更改此静态状态变量。编码的 UI 测试(在编码的 UI 项目中)需要读取这个更新后的状态变量。当我连续运行这两个测试时,调用编码的 UI 测试时变量为 NULL。

我有引用共享库项目和单元测试项目的编码 UI 测试项目,但显然这还不够。我需要做什么才能完成这项工作?

感谢您的任何见解!

【问题讨论】:

  • 测试应该被编写成不依赖于执行操作的其他测试。您应该能够选择套件中的任何单个测试,运行它,并使其正常运行。如果你不能,你应该重新考虑你的测试套件的设计。
  • 我理解这个概念。是的,理想情况下,我会将这两个测试组合成一个测试。不幸的是,如上所述,我很难将 Selenium WebDriver 和 Coded UI 测试代码放入同一个项目中。这个特殊的功能测试需要在网络浏览器中完成一些工作(因此 Selenium),然后在桌面应用程序上完成一些其他工作(因此 Coded UI)。

标签: c# unit-testing static-members multiple-projects


【解决方案1】:

您需要使用已在应用程序之外(更具体地说,在执行程序集的内存空间之外)持久保存的数据来支持您的属性。

有几种合理的方法可以做到这一点。 AppFabric 缓存、Redis 或者 Memcached 会浮现在脑海中。

【讨论】:

  • 感谢您的建议。我最终将此值保存在一个文本文件中以供 CUIT 测试读取。
【解决方案2】:

我猜你的 UI 测试在新的AppDomain 上运行。每个AppDomain 创建自己的所有静态变量实例。

您可以做的是将单元测试代码移动到新类中并在 UI-test 中执行它


附言

测试不应依赖于全局状态。 此外,单个测试不应依赖于其他测试。

如果想要并行执行测试,这将特别棘手

这里很好地讨论了为什么全局状态不好以及您可以做些什么: https://www.youtube.com/watch?v=-FRm3VPhseI

【讨论】:

  • 感谢您对 AppDomain 的建议和见解。是的,我知道这不是理想的设计。我无法让 Selenium WebDriver 和 Coded UI 库在同一个测试项目中很好地协同工作,所以我不得不将它们分开。如果时间允许,我可能不得不再试一次。
  • 将单元测试代码移动到共享库项目中,然后您就可以从 UI-test 调用它,而无需添加对库依赖项的引用
猜你喜欢
  • 2013-10-16
  • 2013-09-22
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-17
相关资源
最近更新 更多