1

我正在为以下方法编写测试:

public IAnInterface Instantiator()
{
    var type = Type.GetType(A_CONSTANT_STRING);
    return (IAnInterface)Activator.CreateInstance(type);
}

测试运行时,从Type.GetType(...)方法中获取的类型为null。我的问题是:

  1. null正在返回,因为在执行测试时并非所有类型都已加载(?)?
  2. 如何克服这个问题?实际上我想测试是否返回了所需的类型。

提前致谢

4

4 回答 4

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);
  }
}

使用接口,您可以模拟并在 Isolation 中ITypeResolver测试接口的实现。ITypeResolver

于 2013-10-17T19:46:09.097 回答
0
var type = Type.GetType("namespace.qualified.TypeName");
于 2013-10-17T19:08:30.457 回答
0

通过添加对指定类型所在项目的引用来解决A_CONSTANT_STRING

于 2013-10-17T19:29:00.007 回答
-1

您的类型在哪个程序集中定义?假设您的方法与您要查找的类型在同一个程序集中,请尝试:

var type = Assembly.GetExecutingAssembly().GetTypes()
    .First(t => t.Name == A_CONSTANT_STRING);

return (IAnInterface)Activator.CreateInstance(type);
于 2013-10-17T19:08:08.780 回答