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

インターフェイスを使用すると、モックを作成したり、IsolationITypeResolverでインターフェイスの実装をテストしたりできます。ITypeResolver

于 2013-10-17T19:46:09.097 に答える
0

で指定されたタイプが配置されているプロジェクトへの参照を追加することで解決しましたA_CONSTANT_STRING

于 2013-10-17T19:29:00.007 に答える