【问题标题】:Can I run a block of code at the beginning of only some tests in a class (from one place)?我可以在一个类的一些测试开始时(从一个地方)运行一段代码吗?
【发布时间】:2019-08-29 19:28:46
【问题描述】:

我在 Visual Studio 2019 中使用 C# XUnit,并且我有一个包含各种测试、使用数据库和 Web 应用程序的测试类。我想运行一些代码,在运行测试之前设置特定的数据库表,然后再进行清理。问题是我需要这段代码只在一些特定测试之前和之后运行。

  • 无法使用 InLine 参数,因为这些测试不适用于相同的内容。
  • 夹具无法使用,因为它们适用于所有测试。
  • 编辑:测试不能有单独的类

理想的情况是:

[For tests with trait XZ]
TestInit(){RUN CODE}

[For tests with trait XZ]
TestCleanup(){RUN CODE]

这在 XUnit 中是可能的,还是使用带有扩展方法的类是最好的可能性?

【问题讨论】:

  • 将这些特定的测试移动到一个单独的测试类中,并有自己的设置和拆卸。
  • 想到了,但不是我想要的解决方案,所有这些测试都属于一起,因为它们都测试网络应用程序中的控件
  • 这些测试需要如此明显独立的设置这一事实表明它们与其他测试相比具有不同的关注点。
  • 它正在更改默认帐户语言,然后将小时格式更改为 12Hr+AM/PM。其他测试不需要该设置,应该使用默认语言设置

标签: c# xunit


【解决方案1】:

查看 xUnit 文档中的Test Fixtures,特别是“测试类作为上下文”范例。基本上,您可以在测试类中嵌套类,其中包括用于测试前设置的构造函数和用于测试后拆卸的 Dispose 方法。

【讨论】:

  • 我可能没有正确理解它,但它与在不同的文件中创建单独的测试类有什么不同吗?对我来说听起来有点像
  • @RegCent 从技术上讲,它是一个单独的类,但该类嵌入在主测试类中。基本上采用目标测试方法并将它们包装在一个类中。
  • 到目前为止,这是我想到的最接近的事情 :) 我猜没有办法得到我在问题中描述的内容,如果有人肯定证实了这一点,我会将此标记为答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 2012-03-07
  • 1970-01-01
  • 2013-02-24
相关资源
最近更新 更多