我正在为以下方法编写测试:
public IAnInterface Instantiator()
{
var type = Type.GetType(A_CONSTANT_STRING);
return (IAnInterface)Activator.CreateInstance(type);
}
当测试运行时,从Type.GetType(...)
方法获得的类型为null。我的问题是:
null
,因为在执行测试时并非所有类型都被加载(?)?提前致谢
答案 0 :(得分:1)
正如@Krekkon已经提到的Type.GetType()方法需要以下字符串:
要获取的类型的程序集限定名称。请参阅AssemblyQualifiedName。如果类型在当前正在执行的程序集中或在Mscorlib.dll中,则提供由其名称空间限定的类型名称就足够了。
对于问题#2:由于对Type.GetType()的静态调用,您将无法测试是否已返回类型。如果你可以改变代码,你可以引入一个负责类型解析的接口,并代表静态GetType方法调用的外观:
interface ITypeResolver
{
Type GetType(string typeName);
}
class SomeClass
{
private readonly ITypeResolver typeResolver = ...;
public IAnInterface Instantiator()
{
var type = this.typeResolver.GetType(A_CONSTANT_STRING);
return (IAnInterface)Activator.CreateInstance(type);
}
}
使用接口,您可以模拟ITypeResolver
并在Isolation中测试ITypeResolver
接口的实现。
答案 1 :(得分:0)
var type = Type.GetType("namespace.qualified.TypeName");
答案 2 :(得分:0)
通过添加对A_CONSTANT_STRING
中指定的类型所在的项目的引用来解决。
答案 3 :(得分:-1)
您的类型定义了哪个程序集?假设您的方法与您要查找的类型在同一个程序集中,请尝试:
var type = Assembly.GetExecutingAssembly().GetTypes()
.First(t => t.Name == A_CONSTANT_STRING);
return (IAnInterface)Activator.CreateInstance(type);