【问题标题】:xUnit test class internalxUnit 测试类内部
【发布时间】:2021-04-20 03:51:22
【问题描述】:

我需要 xUnit 来处理内部测试类。 问题是我使用了通用基础测试夹具 UnitTestBase。 所以我将我的灯具创建为

class MyFixture: UnitTestBase<SomeSystemUnderTheTest>
{
...
}

在某些情况下,SomeSystemUnderTheTest 似乎是内部类。让我们称之为SomeSystemUnderTheTestInternal。结果UnitTestBase&lt;SomeSystemUnderTheTestInternal&gt; 也似乎是内部的,即使UnitTestBase 公开。因此,我无法将 MyFixture 指定为公开的,因为编译器说您的基类具有较少的可访问性。所以我的 MyFixture 只能是内部的,但是 xUnit 要求它是公共的。有没有一种解决方法可以让 xUnit 与内部固定装置一起工作?

SomeSystemUnderTheTest 是一个实现某些接口的类。它不会直接在任何由 DI 容器注入的地方直接使用。它被标记为内部。我稍微简化了上面的情况,SomeSystemUnderTheTest 实际上是从泛型类 SomeSystemUnderTheTestBase 派生的,其中 SomeInternalClass 是一个内部类,因此整个树都是内部的。我无法更改它,因为这不是我们想做的事情。

【问题讨论】:

  • SomeSystemUnderTheTest 是什么?为什么在某些情况下似乎是内部类?在其他情况下它是否显示为公共课程?怎么样?
  • @ChetanRanpariya 我已经更新了问题并解释了什么是类以及为什么它是内部的
  • 你真的不需要最后一段解释为什么一个类可能是内部的。类是内部的是完全合理的!我只想说“在某些情况下SomeSystemUnderTheTest 将是一个内部类”而不是“似乎是”。

标签: c# xunit access-modifiers base-class


【解决方案1】:

SomeSystemUnderTestInternal 文件中的命名空间声明上方添加:

[assembly: InternalsVisibleToAttribute("TestProject")]

其中TestProject 是包含您的测试类的项目的程序集名称。

【讨论】:

  • 我已经有了它,但它没有帮助。如果将相同的属性添加到 xUnit 程序集中可能会有所帮助,但我真的怀疑。 xUnit 明确表示测试类应该是公开的。
  • 这只是让你的测试项目看到你的主要项目的内部。 OP(和我)需要的是相当于放入测试项目中的东西,它允许测试项目的内部对 xUnit 可见。您可以为 Moq 做类似的事情(使主要项目的内部对 Moq 可见) - 将 &lt;AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo"&gt; &lt;_Parameter1&gt;DynamicProxyGenAssembly2&lt;/_Parameter1&gt; &lt;/AssemblyAttribute&gt; 放在 csproj 中,但对于 Xunit 似乎不可能。可能对测试类来说太复杂了,我不知道。
猜你喜欢
  • 2021-09-25
  • 1970-01-01
  • 2016-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多