Sam*_*Sam 5 unit-testing mstest private internal visual-studio
我正在尝试在.net中对一个私有函数进行单元测试.此私有函数返回一个类型的集合myClass,它是一个内部类.
我已经使用了assembly属性InternalsVisibleTo,因此myClass我的Test项目已知该类型.
这是我要测试的代码:
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.");
}
Run Code Online (Sandbox Code Playgroud)
并在我的程序集信息文件中:
[assembly: InternalsVisibleTo("MyProject.Test")]
Run Code Online (Sandbox Code Playgroud)
那么为什么Visual Studio设置列表的类型,Class1_Accessor.myClass因为myClass我的测试项目已知?
因为我得到了运行时错误(无法将类型转换myClass为类型Class1_Accessor.myClass).
因为myFunction是私有的,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);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我不明白为什么它包含myClass的新定义,因为它是一个内部类,它不需要任何访问器.在我看来,这是问题的根源.
| 归档时间: |
|
| 查看次数: |
1924 次 |
| 最近记录: |