[英]Class that is loosely coupled from its properties of Stream type in TDD
我想編寫一個通過TDD使用流類型屬性的類。 該類將從/向文件系統打開/寫入文件。 如下:
public class Csv
{
private TextReader streamReader; //TextReader is an abstract class, parent of streamReader
private TextWriter streamWriter; //similar to TextReader and StreamWriter
//Read(), Write(), and other methods that are specific to CSV.
}
現在可以測試了。
問題是我希望它支持每個實例的讀取或寫入,而不是兩者。 因為Csv不支持讀取或寫入。
另一個問題,類的調用者應該只提供fileName。
第三個問題,理想情況下,它應該有一個Open(字符串fileName)。 但它可能沒有必要。
我建議你創建你的CsvReader
, CvsWriter
類,它將IStream
接口作為CvsWriter
參數,遵循依賴注入原則(就像你上面提到的那樣)。
在准備好測試並准備好代碼之后,您將創建一個小包裝器,現在采用文件名是構造函數/方法參數。 無需測試它,因為它只不過是打開流並將功能委托給已經測試的代碼。
我建議這個解決方案,它可以用TDD測試。 你可以使用Moq進行單元測試。
public class Csv : IReader, IWriter
{
protected Stream Stream = null;
public string IsReader;
private StreamWriter writer = null;
private StreamReader reader = null;
public Csv(string fileName)
{
Stream = new FileStream(fileName, FileMode.OpenOrCreate);
}
public StreamWriter SrWriter
{
get
{
if (reader == null)
{
writer = new StreamWriter(Stream);
}
else
{
throw new NullReferenceException("Current stream type is reader");
}
return writer;
}
}
public StreamReader SrReader
{
get
{
if (writer == null)
{
reader = new StreamReader(Stream);
}
else
{
throw new NullReferenceException("Current stream type is writer");
}
return reader;
}
}
}
public interface IReader
{
StreamReader SrReader { get; }
}
public interface IWriter
{
StreamWriter SrWriter { get; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.