所以我一直在解決一些問題,而且我非常接近,但是我遇到了一個問題。C#工廠問題
因此,這裏是我怎麼稱呼我廠:
ClassImporter classImporter = new ClassImporter(importOptions);
有多種類型ClassImporter
的對象,這裏的基礎ClassImporter
類的類型之一。
public class ClassImporter
{
public ImportOptions Options;
public ClassImporter Importer;
public ClassImporter()
{
}
public ClassImporter(ImportOptions options)
{
this.Options = options;
this.Importer = ClassImporterFactory.GetImporter(options);
}
public virtual List<Class> Import()
{
return Importer.Import();
}
}
public class ExcelImporter : ClassImporter, IClassImporter
{
public ExcelImporter() : base()
{
}
public override List<Class> Import()
{
if (base.Options.FileLocation == string.Empty)
{
throw new BlankFilenameException("A blank Excel file location was supplied.");
}
return new List<Class>();
}
}
及這裏的Factory
類,你看到在那裏:
public class ClassImporterFactory
{
public static ClassImporter GetImporter(ImportOptions options)
{
switch (options.FileType)
{
case FileType.CSV:
return new CSVImporter(options);
case FileType.Excel:
return new ExcelImporter();
case FileType.MySQL:
return new MySQLImporter(options);
case FileType.Oracle:
return new OracleImporter(options);
case FileType.ScreenScraper:
return new ScreenScraperImporter(options);
case FileType.SQL:
return new SQLImporter(options);
case FileType.XML:
return new XMLImporter(options);
case FileType.NotSet:
default:
throw new BlankImportTypeException("Import type was not specified in the Import Options.");
}
}
}
現在我想Assert
上Exception
您在ExcelImporter
類看,這條線:
classImporter.Import();
我的測試歸因於有一個ExpectedException
,但它看起來像當我通過它進行調試時,導入器託管在ClassImporter
類基本上是查看它自己的選項,而不是創建它的主類的基本選項,因此看不到傳入的選項,只是它們的空副本。
我該如何重做?
編輯:全面測試:
[TestMethod]
[ExpectedException(typeof(BlankFilenameException), "A blank Excel file location was supplied.")]
public void LoadExcelFile_EmptyName_ReturnsBlankFilenameException()
{
ImportOptions importOptions = new ImportOptions(FileType.Excel, string.Empty);
ClassImporter classImporter = new ClassImporter(importOptions);
classImporter.Import();
}
我不明白你在說什麼的問題;也許你可以發佈測試代碼? – CodingGorilla
發佈測試 – slandau
IMO你要問工廠對象ClassImporterFactory爲你創建實例ClassImporter,並不允許直接創建特別是與選擇的事情ClassImporters。 – kenny