gpt4 book ai didi

visual-studio - InternalsVisibleTo 似乎被忽略了

转载 作者:行者123 更新时间:2023-12-04 20:18:27 25 4
gpt4 key购买 nike

我正在尝试在.net 中对私有(private)函数进行单元测试。此私有(private)函数返回 myClass 类型的集合,这是一个内部类。

我使用了程序集属性 InternalsVisibleTo ,因此类型 myClass我的测试项目知道。

这是我要测试的代码:

namespace MyProject
{
public class Class1
{
private List<myClass> myFunction()
{
return new List<myClass>();
}

internal class myClass
{
public int MyProperty { get; set; }
}
}
}

[TestMethod()]
[DeploymentItem("MyProject.dll")]
public void myFunctionTest()
{
Class1_Accessor target = new Class1_Accessor();
List<Class1_Accessor.myClass> expected = null;
List<Class1_Accessor.myClass> actual;
actual = target.myFunction();
Assert.AreEqual(expected, actual);
Assert.Inconclusive("Verify the correctness of this test method.");
}

在我的程序集信息文件中:
[assembly: InternalsVisibleTo("MyProject.Test")]

那么为什么 Visual Studio 将列表的类型设置为 Class1_Accessor.myClass自从 myClass我的测试项目知道吗?

因此,我收到运行时错误(无法将类型 myClass 转换为类型 Class1_Accessor.myClass )。

因为 myFunction 是私有(private)的,所以 VisualStudio 会生成以下代码(这对大多数人来说都很好)
[Shadowing("MyProject.Class1")]
public class Class1_Accessor : BaseShadow
{
protected static PrivateType m_privateType;

[Shadowing(".ctor@0")]
public Class1_Accessor();
public Class1_Accessor(PrivateObject value);

public static PrivateType ShadowedType { get; }

public static Class1_Accessor AttachShadow(object value);
[Shadowing("myFunction@0")]
public List<Class1_Accessor.myClass> myFunction();

[Shadowing("MyProject.Class1+myClass")]
public class myClass : BaseShadow
{
protected static PrivateType m_privateType;

[Shadowing(".ctor@0")]
public myClass();
public myClass(PrivateObject value);

[Shadowing("MyProperty")]
public int MyProperty { get; set; }
public static PrivateType ShadowedType { get; }

public static Class1_Accessor.myClass AttachShadow(object value);
}
}

但是,我不明白为什么它包含 myClass 的新定义,因为它是一个内部类,不需要任何访问器。在我看来,这是问题的根源。

最佳答案

cannot convert type myClass to type Class1_Accessor.myClass



说明了我们需要知道的一切:简单地说-您对 myClass 有两种不同的定义.类型由程序集限定; [InternalsVisibleTo(...)]使其易于访问,但除此之外:一切照旧。

找出为什么/在哪里有第二个 myClass ,以及以下之一:
  • 消除歧义(命名空间限定等)
  • 重命名其中一个
  • 如果它们的意思相同且重复错误,请删除其中一个

  • 这与拥有完全相同:
    namespace A { class Foo {} }
    namespace B { class Foo {} }

    那是两个完全不相关的类,称为 Foo ,并且它们之间的转换将失败。

    关于visual-studio - InternalsVisibleTo 似乎被忽略了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9379207/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com