0

我想测试一些我写的反射代码。

如果 ReferencedAssemblies 尚未加载到 AppDomain 中,则会发生边缘情况,即如果返回以下表达式true

typeof(MyType).Assembly.GetReferencedAssemblies()
    .Except(AppDomain.CurrentDomain.GetAssemblies().Select(assem => assem.GetName()))
    .Any()

我有两个问题:

  1. 那还能回来true吗?(我认为“是”[因此标题问题的答案是“否”],尽管我不确定)。
  2. 假设它可以......那么为了单元测试的目的,我该如何安排呢?
4

1 回答 1

1

正如我所怀疑的,它不是一个子集。

您可能会遇到ReferencedAssembly当前尚未将 a 加载到AppDomain.CurrentDomain.

要在测试中实现这一点:

  1. 创建辅助csproj. ( ProjTwo)
  2. 在您的csproj测试项目和ProjTwo.
  3. 添加一个未使用的类,该类引用ProjTwo.
    • 如有必要,将具有静态无操作方法的静态类添加到ProjTwo,以及仅调用该方法的第二个静态类到您的测试项目。
  4. 不要ProjTwo在您的 TestFixture 中的任何地方引用程序集。

瞧!


步骤 4. 似乎意味着ProjTwo没有加载,而步骤 3. 确保编译器无法删除引用,因此它仍然出现,从而避免了GetReferencedAssemblies()这个问题

于 2021-01-01T18:29:27.477 回答