私が読んで、質問ユニットテスト動的ローディングコード
public List<T> LoadPlugin<T>(string directory)
{
Type interfaceType = typeof(T);
List<T> implementations = new List<T>();
//TODO: perform checks to ensure type is valid
foreach (var file in System.IO.Directory.GetFiles(directory))
{
//TODO: add proper file handling here and limit files to check
//try/catch added in place of ensure files are not .dll
try
{
foreach (var type in System.Reflection.Assembly.LoadFile(file).GetTypes())
{
if (interfaceType.IsAssignableFrom(type) && interfaceType != type)
{
//found class that implements interface
//TODO: perform additional checks to ensure any
//requirements not specified in interface
//ex: ensure type is a class, check for default constructor, etc
T instance = (T)Activator.CreateInstance(type);
implementations.Add(instance);
}
}
}
catch { }
}
return implementations;
}
にaswerとしてこのコードを発見し、それは私がこのコードは次のようになり、ユニットテストにどのような最善の方法を思っていましたか?
ユニットテストでファイルシステムを使用することはお勧めできません) –
これは依存しています。個人的に私は単体テストを他のものと同じように宗教的なものと見なしておらず、他の人が傍観しているものを喜んで利用します。しかし、私が言わなければならないことは、可能な限りファイルシステムを遠ざけることが私の最初の選択であろうということです。 –