单元测试——在c#中自动生成访问器类的方法
本文关键字:方法 访问 自动生成 单元测试 | 更新日期: 2023-09-27 17:51:16
我有以下问题。假设有一个类,其中包含一个必须测试的私有类。为了切断不必要的注释和答案,yes必须保持私有,yes必须进行测试。
就像这样:
public class PublicClass
{
private class InternalClass
{
void Method() { }
}
}
为了便于测试,我想创建以下类:
public class InternalClassAccess
{
private object instance;
public InternalClassAccess()
{
// Use reflections to instantiate InternalClass
// and store it in instance field
}
public void Method()
{
// Use reflections to call Method() on
// stored instance
}
}
我可以手动编写这样的类,但我想知道,是否有某种自动的方式这样做?我有VS 2012的专业版
我不知道。net中是否为此内置了任何东西-但是您可以为使用dynamic
的所有此类类编写一次。你会有这样的结构:
public class PrivateDynamicAccessor : DynamicObject
{
private readonly object instance;
public PrivateDynamicAccessor(string typeName)
{
// Instantiate here via reflection
}
public override bool TryGetMember(GetMemberBinder binder,
out Object result)
{
// Access the fields or properties with reflection
}
}
(同样TryInvokeMember
用于方法等)
那么你可以这样写:
dynamic foo = new PrivateDynamicAccessor("Foo.Bar+Baz");
string name = foo.Name;
// etc
我同意这个评论,提醒你,必须这样做是奇怪的。你真的不能放在内部吗?)
你可以使用一些预处理指令:
public class PublicClass
{
#if DEBUG
public class InternalClass
#else
private class InternalClass
#endif
{
void Method() { }
}
}
//Only valid when testing in Debug
public class TestableInternalClass : PublicClass.InternalClass
{
}
在Visual Studio 2010 Ultimate中,您可以右键单击方法/构造函数并选择generate test。这将为外部类创建一个Accessor类,允许您访问私有内部类。